ふらっとC#,C♯,C#(初心者用) Part22
1 :
ななしぃ# :
2007/12/16(日) 19:51:52 このスレッドは
「どんなにくだらないC#プログラミングに関する発言でも誰かが優しくレスをしてくれるスレッド」です。
ほかのスレッドでは恐ろしくて書き込めないような低レベル、もしくは質問者自身なんだか意味がよく分からない質問など、
勇気をもって書き込んでください。
内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
前スレ: ふらっとC#,C♯,C#(初心者用) Part21
http://pc11.2ch.net/test/read.cgi/tech/1195368821/
2 :
ななしぃ# :2007/12/16(日) 19:52:44
4 :
デフォルトの名無しさん :2007/12/16(日) 20:29:55
C#3.0の日本語版解説本早く出せよ。
5 :
デフォルトの名無しさん :2007/12/16(日) 20:35:41
Milan
VisualStudio2008はWin9Xをサポートしているかな?
右クリックメニューをクリックでColorDialogを表示させてフォームの透過色を指定させるようにしたいんですが ShowDialogメソッドを使うとOKボタンや×ボタンをクリックしてもフォームに反映されないうえに なぜか繰り返しダイアログが出てきてしまいます どうすればいいでしょうか?
そんな風にプログラムしてるからだろ。
始めたばかりなので簡単なことも理解できてないかもしれませんがお許しください ほとんどあるサイトから引用したんですがこんな感じです、よろしくお願いします private void StripItem1_Click(object sender, EventArgs e) { Form1 F = new Form1(); ColorDialog colorDialog1 = new ColorDialog(); colorDialog1.AnyColor = true; colorDialog1.SolidColorOnly = true; // カスタム カラーを任意の色で設定する colorDialog1.CustomColors = new int[] { 0x8040FF, 0xFF8040, 0x80FF40, 0x4080FF }; DialogResult dr = colorDialog1.ShowDialog(); // ダイアログを表示し、戻り値が [OK] の場合は選択した色を textBox1 に適用する if (dr == DialogResult.OK) { F.TransparencyKey = colorDialog1.Color; } // 不要になった時点で破棄する (正しくは オブジェクトの破棄を保証する を参照) colorDialog1.Dispose(); }
変なサンプルだなあ private void StripItem1_Click(object sender, EventArgs e) { using (ColorDialog dialog = new ColorDialog()) { //設定は略 if (dialog.ShowDialog() == DialogResult.OK) this.TransparencyKey = dialog.Color; } } こういうこと?
>>12 わざわざありがとうございます
そういうことだと思います
あと書き忘れたのですが、デバッグするとクリックに関係なくはじめからダイアログがでてきてしまいます
とりあえずフォームに反映されないのは >Form1 F = new Form1(); ここでいきなり作成したフォーム(Showもされてない、現在のフォームとムカンケイ)の透過色を設定してるから F.TransparencyKey = colorDialog1.Color; ↓ this.TransparencyKey = colorDialog1.Color;
変なサンプルだけど ほとんど流用しといて肝心なところをおかしくしてるのはなんでだw
>>14 ありがとうございます、理解しました
しかしやっぱりダイアログは始めから出てますし、どのボタンを押しても一瞬消えてまたすぐ出てきてしまいます
いったいどういうことなんでしょうか
17 :
8 :2007/12/16(日) 23:55:28
>>15 本当にお恥ずかしい限りです、、、
そこの理解すらもあいまいでした
また他のところに問題があるんだろう いきなりToolStripなんて使わずに、自分で十分把握できるミニマムなサンプルから ちょっとづつ変えていった方がいいよ
19 :
8 :2007/12/17(月) 00:21:18
>>18 分りました、ちょっと急ぎすぎたのかもしれません
少しづつ勉強して行きたいと思います
ありがとうございました
Xボタン(閉じる)を表示させないウインドウ(フォーム)を作るにはどうすればいいですか?
おおこれです、どうもありがと。
FormBorderStyle.Noneに設定したときタスクバーに表示されるフォームに対する 右クリックを無視させない方法ってありますか? 「閉じる」だけでもできるとありがたいんですが。
テキストボックスを使ってキー入力から出力までにタイムラグを生じさせるプログラムを組んでいるのですが、 上手くいきません。 キー入力には携帯電話型入力デバイスを使用して携帯電話と同じテンキーによるカナ入力を行っています。 現状のプログラムだと、1文字目の遷移にはタイムラグが発生するのですが、2文字目以降はタイムラグが生じません。 また決定キーを押した際にはタイムラグが生じます。
25 :
24 :2007/12/17(月) 16:49:13
ソースコードは以下です。 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.Runtime.InteropServices; namespace WindowsApplication { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void richTextBox1_TextChanged(object sender, EventArgs e) { Sleep(1000); } [DllImport("kernel32.dll")] static extern Int32 Sleep(Int32 millisecs); } } どのように改修すればよいでしょうか? 感覚としてはキーを押すごとにタイムラグが生じるようにしたいのですが。
キーの方のイベントでやったらどうなる? ってかなんでスリープにAPI使ってんだよ。
なんで2文字目から……っていうと、単にスレッド眠らせてる間にキーのキューに溜まってるから ふつうイベントでフラグ立ててタイマー起こす タイマーのTickでフラグ降ろす フラグ立ってるときのキー入力を破棄する
破棄していいのかよっw
>>27 破棄したらだめだろw
それだったら、わざとタイミング遅らせて入力してるのと一緒じゃないか
ド素人は黙ってなさい
もう1個スレッド立ててそっちで出力処理させて inはどんどんためてけばいいんでないの?
スタートアップ常駐アプリ作れる?
作れる
>>23 FormBorderStyle使わずにRegionでクリッピングすればいいんじゃない?
>>33 ありがとうございます。
追加で質問なんですが読み込んだ画像サイズに自動的にクリッピングすることは可能でしょうか?
まずやってみろよ
調べてみましたが、「平行四辺形にする」とか「楕円にする」という記事ばかりでした。 もしよかったら教えてください、お願いします。
C#でブラウザ作りたいのだが とりあえず自分で作ったんだがエラーばかりで起動しない 基本部分だけでいいんで誰か教えてくれ
基本ねぇ…… んじゃ using System;
>>38 とりあえずURL入力して表示できるところまで頼むww
どこまで作ったのか それを見せて間違いを指摘してもらうんじゃないのか
WebBrowserコントロールを使うつもりなのかそうでないのかもわからないな
42 :
37 :2007/12/18(火) 11:08:30
43 :
37 :2007/12/18(火) 11:10:56
WebBrowserコントロール使用でお願いします
passがわからん
釣りだろ
46 :
デフォルトの名無しさん :2007/12/18(火) 11:59:32
超解説サイトは
47 :
デフォルトの名無しさん :2007/12/18(火) 12:18:09
C#を使い始めて1週間の超初心者ですがよろしくお願いします。 問題のコードを単純化するとこんな感じです。 private static void TestMethod() { textBox1.Text = "文字書き込み"; } 「オブジェクト参照が必要です」というエラーが出て困っています。 このメソッドの呼び出し元からでなく、何とかしてstaticメソッドから textboxに文字を書き出したいのですが、どのようにしたらよいでしょうか?
textBox1 のスコープ外なんだろ?
それだけじゃオブジェクトを特定できないから当然といえば当然
51 :
47 :2007/12/18(火) 12:31:34
このメソッドのstaticを消すと、TestMethodを呼び出してるところで 「オブジェクト参照が必要です」となって、 結局全てのstaticを外さないとダメなことになります。 何とかしてstaticメソッドからtextboxに文字を書き出したいのですが、 textBox1があるメインフォームをインスタンス化すればいいのでしょうか?
52 :
47 :2007/12/18(火) 12:46:12
textBox1があるメインフォームをインスタンス化してみたところ、 とてつもなく重たくなって、しかも肝心のtextBox1に文字出力されませんでした;;
>>52 フォームが表示されているなら既にインスタンスはあるだろ。
別のインスタンスを作ってどうするんだよ。
メソッド設計がマヌケなんだしょ インスタンスフィールドに触る可能性があるのにstaticにするなんてよ private static void TestMethod( TextBox tb ) { tb.Text = "文字書き込み"; } とすればおk 元をたどっていって始めのメソッドにTextBox渡さないといかんけどね もっと超マヌケな方法としては、staticなフィールドにtextBox1をあらかじめいれとく
55 :
デフォルトの名無しさん :2007/12/18(火) 14:02:14
C#でもSetProp/GetProp的なことができれば静的関数からthisポインタの参照もできなくは無いな
何を言ってるの?
何を言ってるの? ちなみに多分言ってること自体は デリゲートで実は出来るが 全然何の意味もない。
デリケートな問題ですね
59 :
デフォルトの名無しさん :2007/12/18(火) 18:09:23
オススメの解説サイト教えて ここ見て今ではこんなに立派になりました みたいな
MSDN2
プログラムは本当におもしろい 小学校の頃からずっとやってる 今はプログラムしなくてもいい役職についたが それでも趣味でフリーなものを作りつづけている 本当にありがとうございました
はいはいベテランベテラン 満足したら寝ろ
嫉妬は見苦しいよ。低所得者
本当に好きなことは仕事にするなってことだな。
プログラム好きな小学生なんてキモイオタクだな
>>66 きつい下っ端の仕事ばかり押し付けられて鬱になって自宅療養中ですか?w
>>67 体動かせよ
どうせスポーツ経験もない帰宅部だったんだろ
キモ
69 :
デフォルトの名無しさん :2007/12/18(火) 19:31:23
伝説はここから始まっ
そういったのはマ板でやったほうが釣れるよ
>>68 こんなとこきてスポーツとか言ってるしw
お前は両方できないんだろw
できる人間は何でもそれなりにできるんだよ
俺は毎週ジムに通ってる
低所得者はそんな金も時間もないだろうがなw
VC#2008Express日本語版が出たのにお前らときたら…
安月給の僻みにしか聞こえないかもしれんが、 正直あのガラス張りだったりするジムでわざわざ銭払って汗流す価値観がわからんよ俺には。 なんかネズミが例のくるくる回る奴で遊んでるのを連想して滑稽に思っちゃう。 っていうか、そこらのジムでできるようなことって自宅でも普通にできないか?
貧乏なので自宅にプールないんです
>>73 やりたいところでやればいいじゃないか
田舎なら排気ガスも気にせずに外走れば気持ちいいだろうしな
VC#2008Expressって2005EEと共存できるみたいだけど 本当に大丈夫?
C# と C++ 身に着けるならドッチ!? がいいですか
だからそれをこのスレで聞くなって。 このスレ的には C# よりの回答が多いに決まってる。
どっちもやれ
81 :
デフォルトの名無しさん :2007/12/18(火) 22:18:32
>>77 2005のProとEE、2008のProとEE、全部同じマシンに入ってるが問題ない
>>78 C#は.NETが無いと何もできん。
C++をお勧めする。いろいろな分野で利用できるのは
C++の強みだ。
>>79 ですよね・・・趣味で使う、且つ、業務でも活用できるってのがどちらかなと
>>82 なるほど、どもです。
そもそも.NETを覚えたくてC#とかVBとかいろいろでてますがどれを覚えるのが一番いいのかなと思いまして。
.NETやるならC#
まあ.NETなら間違ってもC++/CLIは選ばないように
86 :
82 :2007/12/18(火) 22:50:47
>>83 .NET覚えたいんだったらC#が分かりやすいと思う。
適用範囲は限定されるが。
VC#2008をいじり始めたんですが、 DelphiのTActionのようにメニューとかツールボタンとかの設定を 一括で管理するにはどうすれば良いのでしょうか?
88 :
デフォルトの名無しさん :2007/12/19(水) 00:43:32
質問です。 メニューに似たような処理をする以下のようなアイテムがあります。 outputCsvFile と outputHtmlFile これらのクリックイベントにはいずれも以下のメソッドが関連付けられています。 OutputFile(object sender, EventArgs e) 出力するファイル形式が異なるので処理の一部を分岐しなければならず、 sender で分岐されるしかないのですが、一般的に使われる定番の分岐方法って ありますか? 現在はキャストして .Name プロパティで分岐させていますが、 他人がメンテナンスしてコントロール名を変えたときなどに、分岐で使用している 文字列が置き換わらないので、いまいちのような気がしています。 もっとよい分岐のさせ方があったらお教えください。
89 :
デフォルトの名無しさん :2007/12/19(水) 00:51:37
マイクロソフトの人が書いたサンプルコードは多くの場合 string hoge = String.Empty; と初期化していますが、 string hoge = string.Empty; と組み込み型の.Emptyを使用しない理由って何なんでしょう?? stringの頭文字を大文字にしたり小文字にしたりするのが面倒くさいので 常に小文字のを使っていますが、何か問題ありますか?
>>88 MenuItemインスタンス自体で判定しちゃいかんのか
>>89 string.Empty と String.Emptyの違いはわかってる?
>>89 stringはSystem.Stringのエイリアスに過ぎないよ
using System;してるならstringとStringは全く等価
でも静的メンバ使う場合はStringって書かないとどうも気持ち悪いな個人的に
>>88 onClickじゃなくてOnCommandにするとか?
CommandEventArgsのCommandNameとかCommandArgumentで分岐。
94 :
デフォルトの名無しさん :2007/12/19(水) 01:21:18
95 :
デフォルトの名無しさん :2007/12/19(水) 01:29:59
>>91-92 組み込み型とクラスということ、エイリアスで等価ということも
知っていますが、だとしたらコードで高速に書いていきやすいのは
すべて小文字のstringに統一することだと思っていたのですが、
そのサンプルコードを書いた人はわざわざString.Emptyのほうを
使っていたんですよね・・・。
個人の趣向かな、とも思ったのですが、デザインパターンとかを
多用してわかりやすいコードを書くレベルの高そうな人だったので
何か深い訳があるのかなと思いまして・・。
大文字小文字程度じゃ速さは変わらんよ
ソースをキーボードから打ち込む速さのことでは?
そうだよ 変わらんよ
ただし小指が死ぬ
最近定数を private const int MAX_ROW_COUNT = 7; ではなくて private const int MaxRowCount = 7; と書く人が増えてきている気がするのですが、 気のせいでしょうか?
正しい書き方をしているだけだろ stringはただのエイリアスなんだから
左側は小文字(たとえばstring)、右側は大文字(String)が普通でしょ。
???
左側はint 右側はInt32か Int32.Parseは嫌だな
string str = String.Empty; int i; if( Int32.TryParse( str, out i ) ) みたいな感じにしてしまう。どうでもいいけど
なんか間違ったけどいいや 酔ってるし
無駄に明示したいときなんか Int32 ってやっちゃうな。 全く意味が無いと知りつつも。
これから C# を覚えてみたいと思っています。 他のソフトウェアのプラグインというものを作ってみたいのですが C#.Net でそういった DLL を作ることはできますか? それともその場合は C++ といった他の言語を選択した方がよいのでしょうか
言語ってかプラグインの仕組み次第だろ。 まあ無理にやれないことはないにしても。
C++でやれば手間かかるが全て解決する
C#で質問なんですけど、 現在在庫管理のソフトを作ってます。 それで、在庫の変数をclass Declarationで宣言して frmMainとライフタイムを同じとするように、public class Form1の内側(全てのメソッドの外側) にpublic Declaration dec = new Declaration();とインスタンスを作成して frmMainでボタンイベントが起こったときに、現在の在庫数をCSVで出力する用のクラス FileInOutのInputCsv(Decralation dec) でCSVから取り込んだ値をDeclarationの変数郡に代入す際に どうしても参照エラーになってしまいます。デバッガで確認すると dec.sample と参照した変数は0となっており、参照できているはずだと思うんですが・・・ なぜでしょうか。どなたかご教授いただけませんか 。
ライフタイム ⇒ ライフサイクルの間違いです^^;
dec.sampleがクラスだったりしないん?
dec.sample は Declaration中に宣言されているint型の変数です。
privateだったりとか・・・・ classのメンバは明示的にpublicにしないとprivate扱いなんだけど
ううぅん・・・ public int なんですけどねえ・・・;; VisualC#を使っているんですが、 そもそもはForm1に在庫の操作をするときに使用する変数を全ておいておくと あまりに莫大になりすぎる為に、それ専用のクラスを作成し、 常にForm1、およびFileInOutクラスから参照したいと考えたのが始まりなんですが 他にいい方法があればそれでもいいんですけどね・・・。 なぜ通らないんだろう・・・。
VB6とかとちがってintもInt32ていうクラスだしコンストラクタで初期値設定とかしないと 参照できないんじゃないかなぁ?
コンストラクタで初期値設定って具体的には dec.sample = 0; とかって感じですか?
かなりエスパーしてるつもりなんだけど そっちももうすこし、具体的にクラスを貼ったりしてくれると嬉しいんだけど。 こういうのだとダメじゃね? class Declaration { public int sample; : } たとえば class Declaration { public int sample; public Declaration() { sample = 0; } } または class Declaration { public int sample = 0; : } とか?
あっ!そうなんですか? すぐに試してみます。
ダメでした;;
クラスは今明示的に0を代入しました。 <class Decralation> public class Declaration { #region "宣言" //********抵抗************** public int stk_25CKF1002FL=0; public int stk_25CKF3901FL=0; public int stk_25CKF1001FL=0; public int stk_25CKF8201FL=0; public int stk_25CKF4700FL=0; public int stk_25CKF1303FL=0; public int stk_25CKF2202FL=0; } public class Form1 : System.Windows.Forms.Form { ・ ・ ・ private System.Windows.Forms.TextBox CLLC4RNCount_tbx; private System.Windows.Forms.ComboBox decide_cbx; private System.Windows.Forms.Button decide_btn; /// <summary> /// 必要なデザイナ変数です。 /// </summary> private System.ComponentModel.Container components = null; public Declaration dec = new Declaration(); //ここに宣言 }
せめてエラーメッセージ貼ってくれw
private void Form1_Load(object sender, System.EventArgs e) { FileInOut fio = new FileInOut(this.dec); fio.InputCsv(); InitializeComboBox(); } これがFileInOutを呼び出す記述で クラスFileInOutは public class FileInOut { public Declaration dec; public FileInOut(Declaration Dec) { dec = Dec; } public void InputCsv() { System.IO.StreamReader strRead = new System.IO.StreamReader("CLLC4RN.txt",System.Text.Encoding.Default); ・ ・ ・ } } こうなってます。
エラーメッセージは 'System.NullReferenceException' のハンドルされていない例外が 在庫管理.exe で発生しました。 追加情報 : オブジェクト参照がオブジェクト インスタンスに設定されていません。 です><
public void InputCsv() { System.IO.StreamReader strRead = new System.IO.StreamReader("CLLC4RN.txt",System.Text.Encoding.Default); dec.stk_25CKF1002FL = int.Parse((strRead.ReadLine().Split(',').GetValue(2)).ToString()); ・ ・ ・ } } 失礼! InputCsv()からDecralationの変数の参照は上の通りでした。 dec.stk_25CKF1002FL = int.Parse((strRead.ReadLine().Split(',').GetValue(2)).ToString()); が抜けてました・・・
FileInOutに渡してるDecがnullとかじゃなくて?
えーと、 private void Form1_Load(object sender, System.EventArgs e) { FileInOut fio = new FileInOut(this.dec); fio.InputCsv(); InitializeComboBox(); } の時点で { dec.stk_25CKF1002FL = 1; //追加 FileInOut fio = new FileInOut(this.dec); fio.InputCsv(); InitializeComboBox(); } としてみると stk_25CKF1002FL = 1 となったので NULLではないと思うんですが、再度確認してみます。
出来ました^^;
結局原因はなんだったの? 次からはもう少し解りやすく質問してくれよ ヒマだったからいいけどw
あ、いや { dec.stk_25CKF1002FL = 88; //追加 FileInOut fio = new FileInOut(this.dec); fio.InputCsv(); InitializeComboBox(); } とやってみたらインスタンスdecのstk_25CKF1002FLの値が88に変わりました。 以前、参照の渡しはできない状態です・・・。
わかりにくくて申し訳ないです・・・。
質問です! C#で ある文字列と一致する名前の変数があれば 参照をその変数に渡すとかってできますか? 例えば string str = "hoge"; int hoge; の時に、 str = 5; としたときに hoge == 5 となるような。 かなりわかりにくいと思うんですが! 分かる方いらっしゃったら教えてください!
マジレス そんなことしないですむようにコーディングしろ
Hashtable おすすめ
レス早っw ありがとうございますww
やはり、変数の名前を文字列と見なす事はできないんですね〜
例が間違っている気がするのだが
>>141 そうですか・・・?
関連付けるために一回一回 文字列をselect caseで比較して代入してもいいんですけど
手間かかりすぎるなあって思って。
何がしたいのかよく分からん そもそもstrはstring型だからstr = 5;とはできないだろ?
スクリプト言語からきた奴がよく患ってる、 「文字列で変数名を指定したい」って病気だろ。 碌なことないからとっとと治せ。
.NETのソースはどこにありますか?
レドモンド
マッチについてなんですが Match m2 = reg.Match(name); name = name.Remove(0, name.Length - m2); 気持ちとしてはこんな感じで、文字列nameの0文字目からregでマッチした文字までを削除したいのですが マッチしたのが何文字目かを得るにはどうしたらいいんでしょうか? てっきり↑の場合m2に文字数が入るのかと思っていたのですがそうでもないようです
>>148 name = name.Substring( m2.Index );
>>149 それ微妙に違うw
name = name.Substring(0, m2.Index);
>>101 XNA Frameworkではpublicな定数はそうなってるよ
Microsoft.Xna.Framework.MathHelper.PiOver2みたいに
リストビューに入れるデータは少し長かったり少し短いだけでダメなんでしょうか?なぜかエラーがでる
C++やらないでC#やる意味あるの?
>>154 C++は玄人用、実力者用
C#はお手軽Winアプリ開発者用
実用的な練習台になるならそれでいいです
C++はゲーム開発者用 C#はお手軽Winアプリ開発者用
.NETアプリは簡単に逆アセできてソース丸見えなんですよね? これはずっと改善されないの? M$ですら、.NETでゲームなどを開発していないのに これを薦めている訳がわからないんですけど
ぶっちゃけMFCでさえ必要になるようなアプリを個人で作れない 仕事は別だが
DllImportでの質問なんですが、SetLastErrorをtureしたら成功した・しないに関わらず 必ずSetLastError();が呼ばれて何らかの値が入ると思うのですが、.NET 3.5を入れた後 からかどうかわかりませんが Exception e = Marshal.GetExceptionForHR(Marshal.GetLastWin32Error()); としてもなぜかeはnullのままで、成功しても入ってたはずのCOMExceptionが入らなく なってしまいました。なぜでしょうか?
GetLastErrorの値は一般的にHRESULTではないからGetExceptionForHRする意味がないと思うのだが
ただし、その気になればHRESULT_FROM_WIN32でHRESULT値へ変換できる。
Marshalに変換メソッド用意されてるよ
まあ.NETにはReflectorという最強の仲間で最強の敵がいるからな
Visual Studio 2008日本語版がつい最近出たみたいだね・・・ 久しぶりにVisual C++ 2008 Express Editionも落としてみたけど、 フォームにぺたぺた&ボタンをダブルクリックでクリックイベント追加と VB見たいになってる・・・
いや昔もMFC使えばそんなもんだったろ。
>>158 難読化ツール売ってる会社が商売にならなくなるじゃん。
なんか変なの来てるの?
>>158 時々でいいので XNA を思い出してあげてください・・・・・
MSはXNAつかってないじゃん
難読化は.netz使えば良い。 自前のソースは圧縮されて影も形も無くなる。
Windows.Forms.Form の背景色だけを半透明にすることは出来ますか? Opacity では全域が半透明になってしまいますし、TransparencyKey では完全に透明になってしまいます。
C#でウィルスソフト作れますか?作るとバレますかね? 使用マシン識別シリアルコードとか暗号化して入れられてるんですかね?
C# つーか、 .net Frx3.5 における XML について質問があります。 ある XElement に対して、 This is a <b>BOLD</b> string. みたいなのをそのまま入れたいんだけど、どうすればいいですか? aXElement.Add(XElement.Parse("This is a <b>BOLD</b> string.")); みたいにできればいいのですが。
177 :
176 :2007/12/20(木) 08:29:44
言い忘れてました。 <b>BOLD</b> はテキストではなく、エレメントとして扱いたいです。
178 :
デフォルトの名無しさん :2007/12/20(木) 08:43:52
DataSet xmlDS = new DataSet(); StringReader xmlSR = new StringReader(xml); xmlDS.ReadXmlSchema(global::Test01.Properties.Resources.schema); // ←リソースとして埋め込んだXML Schemaを使いたいのですが、 どうすればいいのでしょうか? xmlDS.ReadXml(xmlSR);
>>173 DwmEnableBlurBehindWindow
DwmExtendFrameIntoClientArea
180 :
173 :2007/12/20(木) 11:20:12
>>179 ごめん。それ検討したんだけど、FormWindowState.Maximized かつ BorderStyle.None だと反映されないことに絶望したんだ (;´Д`)
やりたいのは WindowsFlip のアレなんだけどなぁ……。Form の2枚重ねでもしてるのかな。
182 :
173 :2007/12/20(木) 11:26:24
>>181 ごめん。API だけじゃさすがにわかんない (;´Д`)
せめて関数名だけでも教えてくださいな orz
184 :
173 :2007/12/20(木) 11:30:45
知らないならレスしないでください!うざいだけです!
187 :
173 :2007/12/20(木) 13:25:58
ごめん。言い過ぎた でも、インターネットのリソースは有限なんだから、無駄な書き込みしないでください……。
>>185 を見てああここID無しだったなってぼんやり思ったw
ID欲しいな でも俺の過去の自演もバレるんかな
>>173 DIB を使ってみては?
確か一部分だけ半透明にできるはずだし。
難読化しなくても本気で読まれちゃいけないところはC++で組むとかすりゃいいのにね
>>189 2ちゃんでは復活しないよ。
datに入ってないでしょ、id。
ブラウザ作りたいんだが
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
namespace MyBrowser
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
webBrowser1.Url = new Uri("
http://www.yahoo.co.jp/ ");
}
}
}
で、InitializeComponentにエラー、というか注意が出てならないのだが
誰か解決方法おしえてくれ
>>193 具体的に何が出るの?
うちじゃそんな風にならんけど。
195 :
193 :2007/12/20(木) 14:31:24
デバックすると InitializeComponentのところに 「▲SecurityExceptionはハンドルされませんでした。」 要求が失敗しました。 て表示される
>>195 多分実行ファイルの場所が悪い。
ネットワークフォルダ上で実行してないか?
197 :
193 :2007/12/20(木) 14:58:12
>>196 マイドキュメントに移したらなりましたw
まじサンクス
なりましたw
簡単なブラウザのようなものを作っています。 webページを取得&整形で時間を食ってしまっています。 そこは仕方がないとして、とりあえず先にフォームを出して、それからwebページ取得&整形をしたいのですが方法がわかりません form_loadが終わったら・・のようにしたいのですがどうすればいいんでしょう
ブラウザ人気あるねぇw WebBrowser コントロールというものがある。 貼り付けるだけでブラウザの完成だ。
Load時にタイマー投げて1回目のタイマー処理でタイマー止めるとかはどうだろう
203 :
199 :2007/12/20(木) 19:47:45
>>201 .NET系はどうも混乱するんだけどやってみる、さんくす
>>202 別にウェブブラウザ作る訳でもないしなぁ
ウェブブラウザでない簡単なブラウザって何だ? ウェブページを取得してそれはブラウズせずに何をブラウズするんだ?
>>205 どうしてもWebBrowserコントロールについてひけらかしたいのか、やりたいなら好きにやればいいと思うよ
全く質問と関係ないこと言ってるじゃないの
という事にしたいのですね:-)
208 :
199 :2007/12/20(木) 20:02:50
なんとも言えないけど少なからずそのWebBrowserコントロールとやらは意識して使ったことないなぁ ウェブページ取得してマッチングとループとで整形して形にしてるだけなんだけどな、俺がなんか勘違いしてるのだろうか 2chブラウザとかみたいな感じなんだけども
こんな単純な煽りが散発するあたりふらっとなんだろうかC#なんだろうか
データ取りに行くの別スレッドにすれば良し
便利な方法を知らないで変な方に突っ込んでいく初心者多いからね
とりあえずWebBrowserを教えるのは適切だろ
>>199 にとって適切かは別にして
うん
>>199 イベントの使い方がわかってないから教えてくれっていう質問?
もっとも、WebBrowserコントロールを知ったところで、 199は欲しいものじゃないと突っぱねると言う展開もありえる気がする。 例えば自分でHTMLをレンダリングするのが目的という場合とか。
いずれにしろあの質問じゃ何とも言えないな 誰かエスパー呼んできて
ソケットプログラミングのためのクラスってありますか? Linux C言語でのコーディングのときのようにソケット関連 のシステムコールを直接呼び出すのは面倒です。
あります。
システムコール呼ぶほうが何してるかわかりやすくて良いけどな
ソケットそのものが低レベルだから.NETのライブラリ使っても大して変わらん気がする TcpClient 辺りになればずいぶん抽象化されてる感じがするけど
>>199 Shownイベントなら表示後に発生するよ。
222 :
デフォルトの名無しさん :2007/12/21(金) 06:06:26
別ウィンドウのClassName(Spy++で表示されるクラス)を知りたいのですが、どうやって取得するのでしょうか? メモ帳みたいにタイトルバーの文字列がコロコロ変わるようなウィンドウを見つけ出したいのです。 public void hoge(Process proc) { IntPtr hWnd ; if (proc.MainWindowHandle == IntPtr.Zero) { hWnd = FindWindow(xxx, IntPtr.Zero); // ここで使いたいのですが。 } else { hWnd = proc.MainWindowHandle; } [DllImport("user32.dll")] private static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
GetClassName
224 :
デフォルトの名無しさん :2007/12/21(金) 07:17:43
Unicodeの"U+12AB"のような形式のコードポイントの文字列を文字に変換するメソッドはありますか? あれば名前を教えてください
U+消してintにしてChar.ConvertFromUtf32
228 :
デフォルトの名無しさん :2007/12/21(金) 09:27:00
>>223 ウィンドハンドルが取れないウィンドなので使えないです…
C#ではウィンドクラス名を明示的に設定できないのでしょうか?
Spy++で見ると自動生成とおぼしき謎の文字列になっているのですが。
>>202 HTTPで2ちゃんのdatファイルを取得してスレ表示
株価データをHTMLで取得してグラフ表示
これをWebBrowserコントロールでやってみろ
明らかにミスアプローチじゃん
>>229 199のどこにもそんな要件は挙がってないんだけど
ここってエスパースレだっけ?
前者はWebBrowserコントロールでできるな
質問が糞すぐる
そんなこと自分でできるような人があんなくだらない質問しないだろう と考えるのは自然だろ
うん
なぜ質問スレなのにやってみろとか言い出しちゃう人がいるのはなんで?
株価データもHTMLで取得するんだからWebBrowserコントロールで表示できるだろ。
>>228 .NET のコントロールは実行時に動的にクラス作ってサブクラス化するのでクラス名は静的には決定できない。
EnumWindows 使って GetWindowThreadProcessId で判定するとかしたら?
HTML で株価チャートを書きたくないなぁw WebBrowser でやるやらない以前の問題だ
そもそもこいつは答を求めてるのだろうか
変にプライド高くて何か言われると反論しちゃうんだろうな
既に質問者いなくなってるのに、gdgd続けられてもな
実はこっそり見てる
>>199 の要点は
>form_loadが終わったら・・のようにしたい
でそ?だからShown
食いついて、無駄にスレ消費しようとするなよレス乞食どもw
ahosugi
247 :
デフォルトの名無しさん :2007/12/21(金) 18:43:12
入社から十年たってるのに 構造体を使ったことがないとほざくプログラマーに C#を仕込むにはどうしたらいいでしょう
板違い
ものすごい初歩的なことのような気がするんですが、 VisualC#2005 Express Edition を使っていて、 using System.Windows.Input; と書くと エラー 1 型または名前空間名 'Input' は名前空間 'System.Windows' に 存在しません。アセンブリ参照が不足しています。 というエラーが出てしまいます。 なぜでしょうか?
DLLの参照の追加 でもたぶんそれは使用しようとしてるクラスが間違ってる
本当にSystem.Windows.Inputが使いたいんだったら VisualC#2008Expressに移行してWPFアプリケーションにする
と、いうと? 要するに System.Windows.Input.Keyboard が使いたいんですが、 このためになにか参照設定しなきゃいけないですか?
2005 じゃ .NET 3.0 開発はできんだろ
System.Windows.InputはWPFという新しいGUIフレームワークのものだから それが使いたいんだったらVS2008でないといけない
256 :
255 :2007/12/21(金) 20:34:24
おっと、今見たら、2008の無償ダウンロードが始まってるんですね。 出直してきます。ありがとうございました。
>>255 PresentationCore.dll は参照設定から見えるかな?
見えなかったら誘導しよう。
ついさっき設定やったばかりだし。
ありゃ。一足遅かったか。 Cider 入れれば 2005 からでも使えたような気がしたんだけどな。
Expressだったら2008への移行を躊躇する理由は何もないだろ 2008Expressで.NET2.0をターゲットにしたアプリケーションも作れるし
>>260 XPS版おもすぎ
本当にこんなもの実用に堪えるんかいな
重いけどスクロールはpdfより綺麗だね しかしメモリ消費が500Mってw
.NETもC#もXPSもWPFもSilverlightもXNAも 数撃ちゃ当たるさ
264 :
255 :2007/12/22(土) 00:28:05
2008入れて、いろいろやって結局System.Windows.Input.Keyboardは参照できたんですが、 どーしても Keyboard.IsKeyDown()で押されているキーが取得できないので、 とうとうあきらめて GetKeyState() 使っちまいました w イベント以外でキーの押下状態を取得するのは、どうするのが正当なんですかねぇ?
キーフック
初歩的な質問で申し訳ありませんが アクセスの beforupdate にあたるイベントは何になるのでしょうか? テキストボックスに文字を入力し、エンターキーが押されたときに自動的に処理を行いたいですが、やり方が判らず困っています
Validating/Validatedか? // FormのAcceptButton設定してない限りEnterの入力も特別視されないぞ
TextChangedからタイマーかけるか、 KeyDownで(e.KeyCode == Keys.Return)か?とか。
リストボックスを複数選択可能にしてるんだけど 複数削除がうまくいきません・・・ どうかご教示くださいませ。
>>269 どううまくいかんのか書いてくれんと。
おそらく頭から消してるんだろうから、後ろから消していけ。
おお まさしくその通りです けつから消したらindex番号も変わりませんね 即レス感謝です
いや、先頭からとか後ろからとか、そういう小手先の問題かよw そういうのはさあ、普通削除するアイテムをリストなり配列なりにリストアップしといて まとめて削除するのが定石ってもんでしょ。 こういうのはさ、知識というかパターンとして覚えることじゃなくて だれが考えても普通の知能があればそうするって程度の話だと思うぞ
273 :
270 :2007/12/22(土) 18:12:33
>>272 頭固いね。
リストの後ろからGetSelected()で選択されているかどうかを調べて削除していけば、
わざわざリストなり配列なりを作らなくてもいいんだけど。
>>373 そっちの方を「わざわざ」と感じるのがプログラマ的には正しい。というより普通。
残念だけど君がプログラマをやるには頭が悪すぎるだけだよそれは。
275 :
270 :2007/12/22(土) 18:23:30
「プログラマ的には正しい」か・・・ 定石に囚われて、それ以外の効率のいいアルゴリズムを考えようともしない奴が プログラマのつもりなんだから世も末だな。 リストボックスから選択されているアイテムをリストアップしてリストを作って そいつをまたループ回して一個ずつ削除するのと、 ループを後ろから回して選択されているアイテムをその場で消すのと、 どっちが効率がいいかぐらい普通の知能があれば分かりそうなもんだけどね。
277 :
270 :2007/12/22(土) 18:34:19
>>276 試しに、あんたの定石でリストボックスから選択されているアイテムを消す
ロジックを書いてみな?
ひょっとして本気で言ってるのか……。 人間として終わってるとまでは言わないが、プログラマとしては始まってすらいないな。 突っ込みどころはいろいろあるんだけど一つだけ。 たぶんVB上がりの人とかじゃないかと推測するけど、そもそも先頭からとかケツからとか いう話はコレクション内のインデックスを指定して削除することを前提としてるんだと思うが、 そもそもそこからしてちょっと変なんだよ。 君の言葉を返せば「頭が固い」。 俺流に言えば「馬鹿の一つ覚え」。
何千件もあるならともかく、せいぜい数十件程度の人間の操作が介入する処理に 最速を求めるコーディングをしようとするほうが効率悪い。
いや「まとめて」っていうのは別にAddRangeのRemove版みたいのがあるからそれ使え、 って意図で書いたわけではないよ。
283 :
270 :2007/12/22(土) 18:53:00
>>279 ごたくはいいから、書いてみなって。
>>280 そりゃまあ、確かにそういうことも多いけどね。
でも、ちりも積もれば山となる、だ。
284 :
281 :2007/12/22(土) 18:55:46
>>282 なんだその程度の話か。
だったら事前にリストアップしようがしまいが後ろからインデックス指定で消していくのは変わらんわけで
お互い好きにすればって感じだ。
>>284 おい本気で言ってるの?
だからインデックス指定ってw
286 :
270 :2007/12/22(土) 18:59:26
>>285 もしかして、RemoveAt()じゃなくてRemove()を使え、て言ってんの?
それとも、他になにか方法があるんかな?
もしかしても糞もあるかよw
288 :
270 :2007/12/22(土) 19:03:41
>>287 言っとくけど、Remove()ってのはコレクションの中を「検索」して消してるんだよ?
最初から位置が分かってるならRemoveAt()の方がはるかに効率がいいんだよ?
それを知ってる上で、人に「馬鹿の一つ覚え」て言ってんの???
>>288 わかったわかった。もう勝手にすれば?
ただ、そこまで俺流にこだわるなら君こそ実際に両方のやり方のコードを書いてみたら?
そしてここに晒してみ?
どっちがより直観的に読めるコードになるかね果たして。
それと、まあどうでもいいんだが俺はパフォーマンスの観点から物をいってないよ。
既に誰か書いてるけど、今時のCPUからしたらどのみちどんなやり方しようと
たいした問題ではないからね普通はそんなの。
290 :
270 :2007/12/22(土) 19:13:23
>>289 そういうだろうと思ったから、ちょうど書いていたところだ。
list がリストボックスな。
ListBox.ObjectCollection obj = list.Items;
for (int i=obj.Count-1; i>=0; i--) {
if (list.GetSelected(i)) {
obj.RemoveAt(i);
}
}
だから、あんたも定石で書いてくれよ。直感的に分かるコードでね。
で、俺は「今時のCPUからしたらどのみちどんなやり方しようと
たいした問題ではないからね普通はそんなの。」
って考え方は嫌いなんだわ。
一つ一つは大した問題でなくともそいつが重なれば大きくなっていく。
今時のCPUでももっさりしてるプログラムが多いのは、こういう慢心が
原因だと思うよ。
ブビ厨だけじゃなくて俺出来るぜ学生までC#は背負わされるのか・・・ いい言語なのになぁ・・・
>>289 直感的なわかりやすさ何て問題か?
どちらにしたって、コメント一行で終わりだろw
リストビューに関してなのですが、選択されたリストビューの項目を取得する方法がわかりません ColumnHeader A = new ColumnHeader(); ColumnHeader B = new ColumnHeader(); ColumnHeader C = new ColumnHeader(); ... こんな具合でA列B列C列・・・とあり、ここにデータが追加された状態で、 ある行をクリックするとその行の特定列の情報を得たいです。 private void listView1_SelectedIndexChanged(object sender, EventArgs e){} こいつの中でうまくやればいいのはわかるのですがいまいち他コントロールとは勝手が違う為よくわからないでいます |A|B|C| |.1|.2|.3| |.4|.5|.6| |.7|.8|.9| ... こんな具合で2行目をクリックすると4,5,6部分が選択され、例えばその中のB列にある5を取得するといったかんじです それではよろしくお願いします
>>290 悪いけどそれトーシローの発想だよ。
そいつか重なれば、ってその操作はμsecオーダーで何度も実行されるケースがあるの?w
そうでなければ「重なり」ようがないだろう。
小学生でもわかる理屈だよ。
っていうか、そんなに(くだらないことに)こだわるなら実際両方やってパフォーマンス測定してみろってw
俺はそんなわかりきったことやるのはごめんだけどね。
295 :
270 :2007/12/22(土) 19:20:29
>>294 この処理に限らず、あらゆることでおまいさんは「今時のCPUは」って
エクスキューズするだろ?
そういうことを言ってんの。
まあ、ああだこうだと偉そうに言う割にはあんたの俺流のコードは書かないみたいだし、
もうどうでもいいや。
>>289 書いてみたよ。
listBox1.SelectedIndices.OfType<int>().Reverse()
.ToList().ForEach(index => listBox1.Items.RemoveAt(index) );
直感的に読めるかどうかは知らんけど。
そんなにご自身の頭の悪さをひけらかさなくても^^;
中級者気どりがスレの意義を壊すスレ
さあ、盛り上がってまいりました。
両方ってことでもう一個も。 listBox1.SelectedItems.OfType<object>() .ToList().ForEach(obj => listBox1.Items.Remove(obj) ); あんま変わらん気がするw
>>300 ToListってなんだよぶち殺すぞ
無駄な処理を書くな
後ろからRemoveAtより直感的に分かりやすいコードなんてないだろ ミスの入り込む余地もないし最善のプログラムだと思うがね
303 :
270 :2007/12/22(土) 19:44:10
そういや、 foreach ステートメント の中でアイテムを書き換えるような操作すると、 実行時に怒られたと思うんだけど、List<>::ForEach() は大丈夫なの?
296,300で書き換えてるのは列挙対象とは別のコレクションだろ
そういやOfTypeも全く無意味か
list.ForEach(Console.WriteLine)みたいにメソッドを渡すとき以外は 素直にforeach文使ったほうが書きやすくて見やすい気がする
foreachは素直に書くな
C#3.0 はその辺の読みやすさの議論になりそうな、 大胆な言語仕様の変更だよなあ。俺は好きだけど。
今まで静観してたけど >274 がバカなだけなんじゃね?
ID無板で最も無意味なレスを見た
意味はあると思うよ。
君の会社で隣でウンココード製造してる奴が見てるかもしれないじゃん。
まあ、そういう奴はたいてい他人から学んで「改心」したりしないけどさ。
俺ならやっぱり
>>290 みたいな(悪いけど)糞コードは書かないな。
標準的なプログラマならやっぱり普通こうじゃないの?
普段はあまり使わないけど行数ケチるためにあえてぶら下がり使うよ。
private void RemoveSelectedItems()
{
if (listBox1.SelectedItems.Count < 1) return;
List<object> removings = new List<object>();
foreach (object o in listBox1.SelectedItems) removings.Add(o);
foreach (object o in removings) listBox1.Items.Remove(o);
}
315 :
311 :2007/12/22(土) 21:43:14
316 :
デフォルトの名無しさん :2007/12/22(土) 21:53:12
290のソースでいいじゃん。見やすいじゃん。駄目なの?
317 :
270 :2007/12/22(土) 21:53:25
>>314 いや、あの、それ、ネタだよな?
さっきのは冗長だったんで書き直すわ。
あわせて関数にしておこう。
private void RemoveSelectedItems()
{
for (int i=list.Items.Count-1; i>=0; i--) {
if (list.GetSelected(i)) list.Items.RemoveAt(i);
}
}
さて、どっちが直感的で効率的だろう?
>>317 うんまあ、そういうコードをより直観的(どうでもいいが「直感」じゃないよ)
だと思う気持ちは分からないでもない。
俺も昔そういう時代があったからね。
でも直観的、あるいは可読的っていうのは行数とか記述の簡潔さとは関係ないよ。
もちろん全く無関係でもないけど。
そういうコードが可読性の観点から劣ることに
納得的な説明を与えるのってなかなか難しいんだけど、一言で言えばそういうのは
読むのに余分に「頭使う」でしょ。
keep it simple, stupidっていうよく言われる原則に反する。
もちろんコードがこれだけの分量なら多少余分に頭使おうとどうってことない。
でも全部のコードがこの調子で書かれてたらかなわんよ。
君自身がいってるように「積み重なる」から。
まさか同じ言語同士で宗教戦争が繰り広げられるとは思わなかったぜ!
みんな、コメント書くことすら許されない環境でコーディングしてんの?
322 :
270 :2007/12/22(土) 22:08:18
>>319 これで「頭使う」って言われてもなぁ。
めちゃめちゃシンプルで分かりやすいと思うけど、君にはわかりにくいんだね。
いちいち冗長なリスト作ってからじゃないとなにをしてるのか分からないんだね。
スマンかったよ。
>>320 C#3.0 がリリースされて広まるにつれ、そのうち同一言語内でのバージョン違いによる
宗教論争が起こるよ。
ラムダ式やら何やらを前に、「スマートに書けて幸せ派」と「読めない&読みにくい派」と。
だからお前らは頭いいよ一番バカなのは
>>324 はい終了
270はきっと趣味グラマなんだろうな、うんうんこれで納得
>>321 よくある勘違いだね。
君はコードを検証的に(要はデバッグ)よむ場合を想定してないんだよ。
コメントなんか書いてあってもコードの正しさは保障されないだろw
つまりコメントに書いてあることが「わかって」もコードが読みにくかったら何の意味もないだろって。
ラムダ式拡張メソッド超楽しいw 気をつけないと濫用しちゃいそう
>>323 C++も通った道。
そっちはそっちでC++0xでまた同じ道を繰り返しそうな予感だが。
>>326 コメントなんて、コードの正しさを保証するために書いてるわけじゃないだろw
検証的に読む場面で、何で逆でループ回してるのか一言コメントが残ってれば、
その考えの下でコードの正しさを検証できるだろ。今回の問題に限って言えば、
誰でもそれですぐに理解できるレベル。
>>314 って、foreach 覚えたてで使ってみたくてしょうがないんじゃね?
で、普通にforで書けばいい場所でもなんでもforeach。
俺にもそんな時期がありました。
>>330 要素へのアクセス順序が問題にならず、全ての要素を処理する場面では、
foreach を利用するのは正しい。
例が単純すぎてどっちでもいい。 どっちのいってることもわからないでもないけど、 今回のようなものじゃどっちでもいいレベル。 ってかどっちがいいともいえない。 まあインデックスリストから逆順で消すなんてのは 定石といってもいい手法だから、このレベルなら毛嫌いするほどでもない。 このやり方だけで、こんなことやるやつは云々なんて判断できるやつはおかしい。 これだけじゃなんも判断できんよ。
>>331 そりゃそうなんだけど、こういう場合みたいに素直にインデクスを使った方がいい場合とかね。
ところで
>>314 に聞きたいんだけど、もしこれがリストコントロールではなくて
万単位のアイテムを持つコレクションで、そのうちのある条件に当てはまるアイテムを
削除したい、なんて場合にもこんな書き方するの?
>>333 頭悪いの?ちょっと上にケース次第っていっぱい書いてあるでしょ?
>>333 パフォーマンスが優先されるべき場面でそれを優先することにはもちろん異論ないんだよ。
プログラミングっていうのは問題解決の手段なんだから。
ユーザビリティーが低下するんじゃ問題解決にならないよ。
ただ、揚げ足取りかもしれないが、万のオーダーじゃ10年前のPenIIのPCでも
問題にならない処理じゃないの?
337 :
側近中の側近 ◆0351148456 :2007/12/23(日) 00:01:00
>>290 (っ´▽`)っ
CODE COMPLETEという名著がある。
君にお勧めするよ。
特に下巻。パフォーマンスの考え方について書かれてるよ。
>一つ一つは大した問題でなくともそいつが重なれば大きくなっていく。
この考え方が20世紀後半にスパゲッティコードが大量生産された原因だよ。
|▽`)っ っていうか、パフォーマンスをそんなに気にするならC#選ばないだろう・・・。
338 :
側近中の側近 ◆0351148456 :2007/12/23(日) 00:22:14
(っ´▽`)っ
個人的な感想☆
>>290 (っ´▽`)っ
ど〜してインデックスを降順に読んでるの?
forって普通昇順でしょ?
まあ、消せば1個ずつずれてくから当然といりゃ当然だが
コメントがないと一瞬悩むよね。
>>314 (っ´▽`)っ
ど〜してremovingsなんて変数を用意してるの?
直接消せばいいじゃん。
何か裏があるんじゃないの?
って疑心暗鬼にとらわれてしまう。
(っ´▽`)っ やっぱりコメントだよね☆コメントが大事☆
テキストボックスに複数行の文字列を入れると自然と一番下までスクロールされてしまいますが、これを無くすにはどうすればいいでしょう? それとテキストボックスのフォントサイズを変えたいのですがtextBox1.Font.Size()あたりは見当違いですか?
>>338 >ど〜してremovingsなんて変数を用意してるの?
>直接消せばいいじゃん。
>何か裏があるんじゃないの?
>って疑心暗鬼にとらわれてしまう
そんな奴はいないでしょw
というか、列挙してるコレクションを(間接的にであれ)操作したらマズいことぐらい
理解できない人がプログラマやってはダメだと思う。
というか、こういう訳のわからんHNやAA多用する幼稚な奴って大嫌い
喩えや誇張じゃなく本当に精神病んでると思う
>>339 .Text += で連結するとスクロールしないみたいだけど。
.AppendText()するとスクロールするね。
フォントサイズ変えるにはサイズの違うフォントを新しく作って
Fontプロパティに設定する
Fontは作り直せばいい
初心者スレで馬鹿みたいな議論するやつもいるわ 馬鹿コテもでてくるわ 雪は降るわ もう大変です
>>341-342 ありがとうございます。
スクロールの方は改行とあわせて+=してひとまとめにしてみます
フォントは直接いじれるもんだと思ってました、さっそくしらべてみます
>>343 関東はまだ雪になってない
ひさしぶりに雪見たいな
346 :
デフォルトの名無しさん :2007/12/23(日) 00:50:56
入門書を読んでデリゲートについては理解した。 ただこれをどういうケースで使うのかが理解できていません。 どんな時に皆さんはデリゲートを使っているのでしょうか?
347 :
側近中の側近 ◆0351148456 :2007/12/23(日) 00:52:19
>>340 (っ´▽`)っ
>そんな奴はいないでしょw
いや、むしろメンバ削除にいちいちforeach使う人のほうが希少なんじゃないか?
「列挙してるコレクションを(間接的にであれ)操作したらマズい」から、
forを使うとかは考えないの?
確かに、
>>331 のとおりforeachを使う目的というのはある。
しかし、使ったらいけない場合もある。それがこの場合なのでは?
もし、貴方のプロジェクトにC#文法に疎い人が入ってきて、
removingsが何のためにあるのかわからず削除しちゃったらどうするの?
(まあ、コンパイル時に警告出ると思うけど)
「列挙してるコレクションを(間接的にであれ)操作したらマズいことぐらい
理解できない人がプログラマやってはダメだと思う。」
と言って、そもそもメンバ削除にforeachを使ってしまった自分に責任はないとでも言うのか?
防御的プログラミングというのがある。これは将来、バグを生み出さないつくりとすること。
それができてないような気がする。
348 :
側近中の側近 ◆0351148456 :2007/12/23(日) 00:54:49
>防御的プログラミングというのがある。これは将来、バグを生み出さないつくりとすること。 (っ´▽`)っ 防御的プログラミングの意味の補足。 将来ではなく、現在も含めバグを生み出さないつくりとすること。 つまり、簡単に言ってしまえば、性悪説を基につくるってことだよ。
349 :
266 :2007/12/23(日) 00:58:39
>>268 遅レスですが その方式で巧くいきました
ちょっとVBA癖が抜けてないみたいでした ありがとうございました
>>346 Form デザイナ使わずに、Form に Button なり何なりを配置して、
クリックしたらメッセージか何か表示するようなアプリを自力で
書いてみればわかるよ!
>>333 今回の問題では、インデックスを使って逆順で削除っていう指針がいいとは思う。
だけど、
>>314 の指針がそうじゃなくて、
>>331 の条件には合致してる以上、
「なんでもforeach」 っていう煽りはおかしいと言ったんだよ。
foreach が使いたくてこういう指針を取るほど
>>314 はバカではないと
決めつけてかかったが、まさか、それを言っているのか?w
352 :
側近中の側近 ◆0351148456 :2007/12/23(日) 01:24:05
(っ´▽`)っ
>>314 には
>>317 と比べると大きな欠点が一つある。
削除対象検索と削除を分けていること。
これがどういう欠点を生むかわかるよね?
今は、削除対象検索の直後に削除をやってるから問題ない。
ただ、保守していく上で削除対象検索の後に何か処理を入れられたらどうする?
2,3行ではなく、数百行ものコードを入れられたら。たとえば、「削除前処理」みたいなもの。
最悪の場合、removingsの内容が書き加えられることも考えられる。
そうなれば削除対象検索の結果を削除するという当初の目的を達成できなくなる。
そうならなくても、削除対象検索と削除が大分離れ、わかりづらくなる。
>>338 >forって普通昇順でしょ?
downto が存在する世界から入った俺にとっては妙な違和感
現在、スルー力が試されています
脱落者
>>353
>>347 よくわからん発想だなあ。。
「いちいち(インデックスを使う)for」ならわかるが「いちいちforeach」ってなんなんだよ。
というか、言ってること矛盾してるよ。
列挙しているコレクションのアイテムを削除することがまずい、少なくとも
トリッキーであることを認めるのなら、「インデックスの列挙」だって同じことだと分かるだろ。
もちろん
>>290 程度のトリッキーさは「たいしたことはない」ことは俺も認めるが、
他にもっとシンプルな方法があるのならそちらの方法を採用するのが君のいう
予防的プログラミングでもあるじゃないの?
356 :
側近中の側近 ◆0351148456 :2007/12/23(日) 01:28:11
(っ´▽`)っ
ちなみに(っ´▽`)っは中立だからな。
コンストラクションにはいろいろな考え方がある。
(っ´▽`)っは、とっても素直な良い子だから感じたことを言ってるまでだよ☆
どっちが正しいとかはないと思う。
>>352 だって、逆手に取れば、削除前処理を入れられるわけだし。
ただ、諸刃の剣だね。
>>352 意味わからん。何がいいたいんだこの幼稚君は
踊り子にお触りにならないようお願いします
>>358 あぶねー、5行も投下するところだった。
360 :
側近中の側近 ◆0351148456 :2007/12/23(日) 01:46:58
>>355 (っ´▽`)っ
>インデックスの列挙
どっから出てきた?
>>290 は列挙じゃないと思うんだけど。
コレクションに対する正当なアクセスでしょ。
>
>>290 程度のトリッキー
>>314 も十分トリッキーだと思いますが。
どうしてそこまでforeachにこだわる?
361 :
側近中の側近 ◆0351148456 :2007/12/23(日) 01:53:12
(っ´▽`)っ
>>314 の「まあ、そういう奴はたいてい他人から学んで「改心」したりしないけどさ。」
って、
>>314 自身だったりして・・・
批判されると
>>340 みたいに
「喩えや誇張じゃなく本当に精神病んでると思う」んでしょ?
>>360 foreachになんかこだわってないんだよ。
シンプルさにこだわってるの。
というか、「手続き抽象」ってことの意味が分かってない人間が
こんなにいるとは思ってもみなかったよ。
小学校のころ算数ができなかった子がプログラマになってるのかな。
抽象的な話が苦手なら(計算問題を買い物の問題に置き換えるように)具体例に置きかえればいい。
例えば住所録から今年は年賀状を送らない人間を削除する場合、
どういう手続きでやるか考えてみれば?
>>361 いや、別に俺が批判されてもされなくても君は間違いなくキチガイだよ。
この手合いは例外なく「俺はキチガイのふりをしているだけ」だと思ってるようだが、
そんなくだらない動機を持つこと自体が既に幾分かかなりか狂ってる、
という事実に気づかないみたいだね。
363 :
側近中の側近 ◆0351148456 :2007/12/23(日) 02:04:21
(っ´▽`)っ
しかも、
>>290 の悪い点も「具体的に」上げずに、
アルゴリズムとか何とか言って、ただ
「人間として終わってるとまでは言わないが、プログラマとしては始まってすらいないな。」
「俺ならやっぱり
>>290 みたいな(悪いけど)糞コードは書かないな。」
って言ってる時点で「他人から学んで「改心」したりしない」んでしょうな。
はっきり言って、プロジェクト運営上障害となる人物です。
(っ´▽`)っ ・・・もしや釣り?
>というか、列挙してるコレクションを(間接的にであれ)操作したらマズいことぐらい >理解できない人がプログラマやってはダメだと思う。 だから逆順で解決してるか別で取り出して操作することで解決してるか 解法の違いなだけだろ。 何度も言うがこの程度の処理じゃどっちが怪しいが判断つかんわ。 まあ俺はどっちかって言うと、ごく簡単で定石的なやり方ですむのに 余計な処理を増やすのは好みじゃないけどな。 逆順で処理とかじゃなくてもっとトリッキーなことをするなら意見は変わってくるけど。
>例えば住所録から今年は年賀状を送らない人間を削除する場合、 >どういう手続きでやるか考えてみれば? 何が言いたいのかわからんぞ、あんまり変な方に持ってかないほうがいいと思うがな。 クイックソートなんて書くやつは馬鹿だ、とは思わんだろ?
367 :
側近中の側近 ◆0351148456 :2007/12/23(日) 02:11:27
>>362 (っ´▽`)っ
だから、
>>314 はそれほどシンプルじゃないって。
>例えば住所録から今年は年賀状を送らない人間を削除する場合、
>どういう手続きでやるか考えてみれば?
少なくとも
>>314 みたいに削除対象検索と削除を別々には行わないと思います☆
いちいち人の名前またはページ番号をどっかに記録しておいて(削除対象検索)、
全部見終わってから、もう一回探して削除したりはしないと思います。
上げ足とりたいだけかほんとに応用力ないのか
>>366 じゃあ補足。
普通はまず「削除する人のリスト」を紙に書き出すでしょ。
抽象的に言えば「削除対象のリストアップ」。
つまりそれが人の思考に親和的な方法だってこと。
370 :
側近中の側近 ◆0351148456 :2007/12/23(日) 02:16:45
(っ´▽`)っ
っていうか、この人は現場の人間じゃないでしょ?
現場にこんな自己中心的、他者排除の考えの人がいたら
他のメンバみなキレるでしょ。
だって、「君は間違いなくキチガイ」って言うんだからな。
・・・いや、それがまかり通るのがSE業界だね☆
>>369 (っ´▽`)っ
・・・本当にそんなやり方するの?非効率じゃないか?
紙に書き出して、その後消すかどうか再考するなら別だよ?
その再考こそ前述の「削除前処理」なんだが。
確かに喩えがまずかったねすまん。 「削除対象のリストアップ」という風に抽象化することが 人間の思考に親和的である点は間違ってないと思うけど。
削除対象は選択されてるんだぜ。 少なくともなんらかでマークされてる状態だ。 だったらそのまま順番に見ていってマークされてたら抜き出すのが人間の思考だ。 プログラムではそう単純な思ったとおりの処理ができないから、 それを解決するために、逆順とかいったんコレクションに取り出すとかするわけだ。 だから、現実の人間の思考とか、そういう方向で説明しようとすると おかしくなるんだよ。 少なくとも普遍的な説明には向かない。 だからそういう変なやり方で説得しようとするのはやめたほうがいいって言ってる。
373 :
側近中の側近 ◆0351148456 :2007/12/23(日) 02:28:07
(っ´▽`)っ
>>372 そうだね☆こんなの昔なんかの本で見た。
4つの長さの違う棒がある。
人間にとって、長いほうから順番に並べるのはすごく容易だ。
しかし、コンピュータにその処理をさせるとなると難しいと。
それこそソート処理の難しさなんですが。
(っ´▽`)っ
しおんの王始まったので止め☆
踊り子も触るやつもみんな死ね
375 :
デフォルトの名無しさん :2007/12/23(日) 02:32:05
この流れは酷いwwww他所でやれよwwwww
WinFomsでアイテムにインデクサでアクセスすると 非常に効率が悪かったりすることが多いから、 出来るだけforeachを使うようにしているけど、 この場合はそういうワケじゃないんだ。
そうともいかないねえ、多分。 アイテムの直削除は効率いいのかな? 実際どういうやり方が効率いいんだろ?
RemoveだとListBoxの
AAA
BBB
AAA
というデータの3件目に対してRemove("AAA")とやったら1件目が消えてしまう問題がある。
RemoveRangeとか範囲で消せるメソッドがない以上RemoveAtがいいんじゃない。
複数件追加や削除するならBeginUpdate/EndUpdateを入れとくほうがより大事だと思う。
>>376 .NETの1.0か1.1のListBoxの場合はforeachが圧倒的に速かった記憶があるが今は差はないなぁ。
379 :
デフォルトの名無しさん :2007/12/23(日) 06:41:39
1.1から2.0へ移植しているのですが、2.0のContextMenuStripにおいて、 1.1のContextMenuにあるOnPopupに相当するメソッドはどれですか?
>>379 Opening/OnOpeningあたりかな
>>380 ありがとうございます。
うごきました。
なんか揉めてたみたいだけど、 正直初心者の俺には理解できなかったので 話に参加できなかったのが悔しかったです
もみめてなくて?
386 :
デフォルトの名無しさん :2007/12/23(日) 08:05:10
Dim オッパイ揉めなくて悔しいって事じゃね? As Integer
黙れVB厨
ご、ごめんなたい!:(;゙゚'ω゚'):
はるか昔にN88BASICから入った俺には、 forの逆順ループぐらいで「トリッキー」なんて言っちゃうことに時代を感じた。
390 :
側近中の側近 ◆0351148456 :2007/12/23(日) 08:58:33
>>388 (っ´▽`)っ かわいいっ♥(抱
(っ´▽:(;゙゚'ω゚'):
>>389 そりゃ悪いけど君が時代ボケしてるだけw
入った時代をいうならこっちはN-BASICすらなかった時代からやってるっつーに。
人の能力は変わってないのに時間あたりに読んで理解する必要があるコードの量が
何倍になってると思ってるんだよ。
要は人間様の貴重な時間を浪費させるようなコード書くな馬鹿、って話だよ。
先進国ではマンパワーが一番高価だってことがわかってんのかね。
>>391 むしろコードの量を増やしておいてそれを言うか w
だから、逆順ループで削除なんて考えるまでも無く一瞬で理解できる定石だっつーの。
多分、凝り固まった変な原理主義者の先輩から教えられて来たんだろうな。
うちの会社にもそういう奴いたわ。
OfTypeはない Castでいい。
forで一個一個見るやつはパフォーマンスが大事といいながら遅いアルゴリズムを 選択してるから矛盾してるだろ SelectedIndexesのケツからRemoveAtでいいじゃない
>>394 SelectedIndexes のケツから見るにはどうするのかな?
SelectedIndexesってソートされてねえの?
>>394 そこはそもそも「パフォーマンスが大事」という前提が間違ってるから問題ない。
むしろ指摘する必要があるのは、考え方の不自然さだよ。
なぜ(削除すべきアイテムは処理前に既に確定してるのに)全検索する必要があるのか、という。
もっとも、それも恐らく(SelectedIndexesのクローンを作ってソートする手順を削って)行数ケチってる
(そんなことして他人に言い負けたくないのか知らんが)だけだから、指摘する意味は薄いかもしれん。
>>396 ソートされてる。昇順でな。
だから、ケツから見るにはいずれにしても逆から見なきゃいけないだろ?
>>397 削れる手順は削るべきもんだろう?
ソートするまでもなくインデクスは昇順に並んでいるのは分かってるのだから、
わざわざそれを取り出してリストに入れてソートして、という余計な手順を
入れるほうがよほど不自然だろうに。
「言い負けたくない」のはおまいさんだろうに。
つうかね、
foreach (object o in listBox1.SelectedItems) removings.Add(o);
って実質的に全検索じゃないの? w
>>398 頭悪いなあ。。
だからパフォーマンスの観点から、あるいは「CPUの視点から」自然不自然を言っているのではない。
あくまで人間の視点で、その考え方が自然かどうかを問題にしているんだよ。
Listつくって入れるのは人間の視点から見て実に不自然だ
402 :
側近中の側近 ◆0351148456 :2007/12/23(日) 10:06:42
>>399 (っ´▽`)っ
>>314 は一度他のプロジェクトが作ったソースを読んで
自分のコーディング手法について考えてみたほうがいい。
このままだと将来誰もついてこなくなるよ。
他の人の考えを一切合切拒絶する人っぽいから。
>>399 それはそれを見る人間の頭の出来の問題だぞ。
ソートされてるリストをケツから削除する、ということは、
それを理解してる人間から見たら全く以って自然だろ。
おまえさんが必死で言うほど、不自然だと思ってる奴がどれぐらいいる?
自然か不自然かという尺度の問題を言ってるなら、そんなもん
人によって感じ方は違うだろう。
おまいさんの感じ方が万人に通用すると本気で思ってるのか?
404 :
側近中の側近 ◆0351148456 :2007/12/23(日) 10:09:21
>>403 >ソートされてるリストをケツから削除する、ということは、
>それを理解してる人間から見たら全く以って自然だろ。
(っ´▽`)っは自然だと思う。
ForEach使うためにToListするのも実に不自然だ
ハードウェアの進化に従って、人間の思考に沿うようにプログラミング言語は 進化してきたし、そのようにプログラミングすべきってのはわかる。一般論として。 ただ、人間の思考に沿わない部分をすり合わせするのがプログラマの存在意義だ。 彼らの大部分が一瞬で理解可能で効率がよい手法であれば、普通とかトリッキーとか 何でそんな議論になるのかわからん。
int n = 0; while (n < Items.Count) { if (Items[n].Selected) { Items.RemoveAt(n); } else { ++n; } }
>>407 何度も言うけど絶対評価でダメとまでは言ってない。
確かに大部分の人は290のようはコードでも理解して意図を読み取るのに
そんなに時間は掛からないと俺も思うよ。俺自身そうだし。
ただ相対評価としてダメって言ってるだけだね。
もっと処理を抽象化した(つまり「何をしてるのか」を人語に翻訳しやすい)
分かりやすい書き方があるだろう、ってね。
それとこれはちょっと言い掛かりっぽいかなとも思ったから全く言ってないけど、
>>290 のようなコードは「リストからアイテムを削除した場合、それより後ろのアイテムが前に詰められるだけ」
という前提に暗黙的に立っているわけだけど、これもどうなの?
まあこれはやっぱり言い掛かりかもしれん……。
初心者なおれとしては使用メソッドの少ない290は見やすくていいな 仕事で使うときでもみんながC#マスターとは限らないんじゃないか?
人工知能を持った美少女を作ろうと思うんだけど C#でできますか?
他の言語でできるならC#でもできる
プロジェクトのメンバーで女性を残業させてそのまま製造すればおk
>>409 Sortedプロパティを設定してない限り順序は保証される。
仮に処理が完全に終わるまで前につまらない場合でも
カウンタを1ずつ減らしているので問題はない。
WPFのListBoxが実はそういう動きをしている。
>>409 > 分かりやすい書き方
これが「わかりにくい」とする基準がどうしてもよくわからんわ。
一体どの程度の知能程度を対象としてるんだ?
正直、これがわかりにくいと思うような人間がプログラマやるのは向いてないと思うぞ。
周りのプログラマに両方のソース見せて聞いてみな。
逆ループがわかりにくいなんて言ったら笑われると思うけど。
なんでもかんでも抽象化してわかりやすい書き方をするって言う奴は、
ロジックをちゃんと抽象化できずに泥臭く書くことしかできないことの
言い訳にしてるんだわ。
むしろ過度な抽象化によって煩雑でロジックの本質からかけ離れたことを
していることに気づいてない。
物事には、ホドホドってものがあるんだよ。
まったく呑気なもんだね 誕生日だってのにひっぱり回されて仕事したり つまんないおっさんに面会したり あほな群衆に手を振らなくちゃならない御方だっているのに 誕生日くらいゆっくりさせてやれよ
>>409 >「リストからアイテムを削除した場合、それより後ろのアイテムが前に詰められるだけ」
を前提にするならこういう手もある。
int i;
while ((i = listBox1.SelectedIndex) >= 0) listBox1.Items.RemoveAt(i);
>>414 削除してもソート順は変化しないからSortedプロパティは関係なくね?
匿名メソッドのために生成される、デリゲートの呼び出し対象となるメソッドは 同じ場所で定義された匿名メソッドであれば常に同じと考えていいのでしょうか クラスが生成された場合にターゲットのインスタンスが異なることがあるのはわかりますが
>>420 同じとみなしてよい。Equalsや==はオーバーライドされてて真となる。
心配してるのはしたのケースでしょ?
hoge.Event += new MyDelegate(Func);
hoge.Event -= new MyDelegate(Func);
>>415 >なんでもかんでも抽象化してわかりやすい書き方をするって言う奴は、
>ロジックをちゃんと抽象化できずに泥臭く書くことしかできないことの
>言い訳にしてるんだわ。
こういうのって「日本語でおk」って言うんじゃないの?
というか、「ロジックをちゃんと抽象化できずに泥臭く書く」というのは
>>290 のようなコードのことをいう。
そんなことはない、というのなら
>>290 のコードを人語に翻訳してみな。
だから、あくまで相対的にではるが問題があると言ってるんだよ。
>>422 インデクスが変化しないようにするため、リストの後ろから選択されている
アイテムを削除する。
これ以上、どうややこしく翻訳しろと?
>>423 『「削除リスト」にリストアップされたアイテムを削除』の方がよりカンタンだ、
と言ってるだけだよ。
>>420 む、ごめん。匿名メソッドの話だった。
>>421 は間違い。
staticでない以上、例えメンバや外のスコープの変数を参照してなくても
インスタンスが違えば別のデリゲートになるはず。
>>424 重要なところをはしょって無理やり簡単に言おうと思えばなんとでもなるわ w
より正確に書くなら、
「選択リストから削除リストを作り、削除リストを元にリストからアイテムを削除」
だろ。「人語に翻訳」なんて曖昧な基準で決め付けるなよ。
ここまでの流れで、お前以外誰一人として
>>290 が分かりにくいなんて言ってるのは
いないって事実が、なによりよく物語ってるわな。
要するに、おまいさんは自分の考えが完全に正しくて、他人がどうしようと全部それは
ダメなんだろ?
正直、こういうやつが自分のチームにいたらタマラんと思うわ。
427 :
420 :2007/12/23(日) 13:03:31
すみません。説明がおかしかったですね。 同じ場所で定義された匿名メソッドに対して 2つ以上のメソッドが生成されることはありえないのかという意味です。
>>426 頭悪いなあ。。
君のような思考は一般に「ダブルスターンダード」と呼ばれる。
早い話が
>>423 も「重要なところをはしょって無理やり簡単に言」っているのが分からないの?
Removeを使うと同じ値が二つあれば破綻するから誤ったアルゴリズムだ
俺だったらRemoveAtにIEnumerable<int>をとるオーバーロードをExtension Methodで作って呼び出すね これで間違いようがない
>>428 お前がそれを言うか w
では、そのはしょってる重要なところを言ってみな。
ちなみに、あんたの解法では、もし同じアイテムが複数入っていたらうまく動かないって
ことは理解できてるよな?
つまり細かい前提事項まで全部書き出せばいくらでも複雑に言うことができるし、
簡単に言おうと思えばどちらも「選択されたアイテムを削除する」に収斂するんだよ。
要するに、おまえさんの言ってる「わかりにくい」とか「わかりやすい」の基準が
単におまえさんの脳内基準でしかなく、それがたまたまちょっと他人とはズレてる
ってことなんだよ。
他人の頭が悪いと思う前に、それが理解できない自分の頭の程度を冷静に
考えた方がいいと思うよ。
>>430 おーっと、そもそもRemove使うのは妥当じゃないっていう意見が出てまいりました。
こりゃ、さらに冗長なコードが生成されるな。
「ダブルスターンダード」とは誰も呼ばんわなぁ
もういいんじゃねえかそろそろ 踊り子さんもがんばったと思うけどもう飽きてきたよ
>>434 どの主張とどの主張がダブルスタンダードなのか、簡潔に指摘してほしいところだよなw
438 :
側近中の側近 ◆0351148456 :2007/12/23(日) 13:43:19
(っ;д;)っ 私のために喧嘩しないで☆
>>314 this.listBox1.SelectionMode = SelectionMode.MultiExtended;
for (int i = 0; i < 100; ++i)
{
this.listBox1.Items.Add(odd);
this.listBox1.Items.Add(even);
}
こういうコードで3番目のOddを選んで消すと1番目のOddが消えるw
440 :
側近中の側近 ◆0351148456 :2007/12/23(日) 13:45:05
>>428 (っ´▽`)っ
いい加減に「頭悪いなあ。」とか言うのやめたほうがいいよ。
たとえどんなに正しいことを言ってても信頼性がなくなる。
442 :
439 :2007/12/23(日) 13:46:01
すまん2行ほど抜けてた。 this.listBox1.SelectionMode = SelectionMode.MultiExtended; string odd = "Odd"; string even = "Even"; for (int i = 0; i < 100; ++i) { this.listBox1.Items.Add(odd); this.listBox1.Items.Add(even); }
443 :
側近中の側近 ◆0351148456 :2007/12/23(日) 13:47:03
(っ´▽`)っ ダブルスタンダードが悪いことなのかな? コンストラクションは適材適所というか柔軟に考えないとダメだよ。 もちろん標準化も必要だけどね。
444 :
側近中の側近 ◆0351148456 :2007/12/23(日) 13:48:22
>>441 (っ´▽`)っ↑は電話番号じゃないもん☆
(っ´▽`)っのシリアルナンバーだもん
445 :
439 :2007/12/23(日) 13:53:08
というかこれで十分だな。 連投スマソ。 this.listBox1.SelectionMode = SelectionMode.MultiExtended; for (int i = 0; i < 100; ++i) { this.listBox1.Items.Add("Odd"); this.listBox1.Items.Add("Even"); }
>>439 確かにその問題はあるね。
リストボックスに重複するアイテムが存在してかつアイテムの順序が意味を持つ場合は
>>314 は使えない。
それは事実だから認める。
しかし
>>279 はインデックス指定の何が気に入らなかったんだろうな。
>突っ込みどころはいろいろあるんだけど一つだけ。
>たぶんVB上がりの人とかじゃないかと推測するけど、そもそも先頭からとかケツからとか
>いう話はコレクション内のインデックスを指定して削除することを前提としてるんだと思うが、
>そもそもそこからしてちょっと変なんだよ。
>君の言葉を返せば「頭が固い」。
>俺流に言えば「馬鹿の一つ覚え」。
重複してたらインデックス指定しなきゃ消せんしね
>>446 >リストボックスに重複するアイテムが存在してかつアイテムの順序が意味を持つ場合は
リストボックスに重複するアイテムが存在するだけで十分使えないと思うなぁ。
アイテムの順序が意味を持たなくても
>>314 のコードの実行後は
セレクションがぐちゃぐちゃになるというひどいユーザビリティー。
451 :
側近中の側近 ◆0351148456 :2007/12/23(日) 14:22:53
(っ´▽`)っ
では、陪審員の皆さん。
>>314 に対する判決を☆
どっちでもいい
>>451 その書き込みで確証が持てた。
お前って議論を第三者的な立場で眺めて、たまに一般論を持ち出してきて、
でもだから議論の進展に役立ってるわけでもなく、要するに的外れで、
ほんとどうしようもねーなw
>>446 で、その問題を解決するには、どういうコードにするべきかね?
>>417 のコードが一番シンプルにみえるのだがなんか問題あるの?
>>455 ケツから消すよりつめる処理が余計に必要になる
>>455 シンプルなのはダメなんだってさ。
アホでもわかるように懇切丁寧にグダグタとしつこく書かないと。
458 :
側近中の側近 ◆0351148456 :2007/12/23(日) 14:33:21
>>453 (っ´▽`)っ
被告人は発言を慎むように。
もう誰も貴方の意見に耳を傾けようとは思わんよ。
IDでないとよくわからん
460 :
側近中の側近 ◆0351148456 :2007/12/23(日) 14:36:05
>>453 (っ´▽`)っ
ついでに言っておこう。
頭悪いなあ。
461 :
側近中の側近 ◆0351148456 :2007/12/23(日) 14:37:16
(っ´▽`)っ 知らないならレスしないでください に続く名言だね
まんこまんこ〜
>>446 なあなあ、
>>432 でも重複アイテムについて指摘してるのに、
>>339 が出るまで理解できなかったの?
で、その問題を解決するにはどう書けばいいのかコードを書いてくれよ。
ちゃんと人間にわかりやすい書き方で、逆ループを使わず、 RemoveAt() も使わずにさ。
ダブルスタンダードもなしでな。
464 :
463 :2007/12/23(日) 14:39:03
うめ
>>455 数バイトほどmemmov相当の処理が増える程度。
ListBoxの内部でやってる処理で気にする奴は馬鹿。
問題は1件ごとに詰める処理をやる前提であること、
WPFで使えなかったのよ(泣
467 :
側近中の側近 ◆0351148456 :2007/12/23(日) 14:44:32
(っ´▽`)っ >お前って議論を第三者的な立場で眺めて、たまに一般論を持ち出してきて、 >でもだから議論の進展に役立ってるわけでもなく、要するに的外れで、 っていうか、今日の未明からずっと貴方の指摘に対して きちんとレスをしてきてるわけだけどね。 しかも、コテまでつけてだ。年賀状の見当違いな質問に対してもだ。 これで役に立たないとか的外れとか言ってる時点で 貴方は終わってるよ。
ふぅようやく追いついた
野次馬なんで色々言わず一言だけ
>>314 レベルが低いのは君なんだから精進しなさいね
>>466 そうなのかよ
馬鹿で悪かったなちくしょう
>>467 あのね、俺
>>453 なんだけど、君が言ってる「被告人」とか「年賀状の〜」とか、
それこそ見当違いなんだけど。君のそのコテを名乗るレスの中では、
俺の書き込みに対してレスをいただいてないw
だから、旗色が悪くなった「被告人」が君に八つ当たりしているんじゃないよ。
「被告人」の名誉のために言っておくけどw
>>463 俺ならこう書くと思う。
private void RemoveSelectedItems2()
{
while (listBox1.SelectedItems.Count > 0)
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex);
}
}
>>290 のようなコードはまず書かないねやっぱり。
>>471 あのねぇ、それは単に好みの問題でどっちがあってるとか間違ってるってレベルじゃないよ。
で、インデクス指定はダメっつってたのはどーなったのかな?
それこそダブルスタンダードじゃないの?
>>471 そうは言ってないよ。
削除する際に、コレクションのインデックスを指定して削除することを
(自明の)前提とするのはおかしい、と言っただけ。
>>473 アイテムが重複していないことを自明の前提としていた奴が言うことじゃないな。
>>473 C# で、かつ、対象となるコレクションの性質が限定されてる今回のケースで、
そういう話が出てくる意味がわからん。
>>473 リストボックスの選択はインデックスに対して行うものであって
オブジェクトに対して行うわけじゃないんだから
この場合は前提にしていいんじゃないかな。
事前にリストアップするにしても、対象はオブジェクトのコレクションじゃなくて
インデックスのコレクションであるべき。
>>279 が質問をよく読まずに過度に一般化した話をひっさげて突撃してきた、
という話に見える。
コピーしなきゃこんなにシンプルに書けるのにわざわざコピーして複雑にしたことに対する弁明は無いの?
ListBox.ObjectCollection からアイテムを削除した時に順序が狂わないってのは 今までずっと自明の前提だと思っていたんだが、それって間違ってるのか? そうじゃないと、普通に一個削除する時にもいちいちリストの順序が変わっちまうことを 心配しなきゃならんのだが。
一般解を示そうとして、かえって自分の方法のほうが条件が限定的になってたり、お茶目だよね。
>>471 好き。漏れでも一瞬で理解出来た。メモっとく。
private void RemoveSelectedItems2()
{
while (listBox1.SelectedItems.Count > 0) //選択済みアイテムが無くなるまで
{
listBox1.Items.RemoveAt(listBox1.SelectedIndex); //消しまくる
}
}
482 :
側近中の側近 ◆0351148456 :2007/12/23(日) 15:48:56
>>470 (っ´▽`)っ
とうとう自演までするようになったか・・・。
483 :
側近中の側近 ◆0351148456 :2007/12/23(日) 15:52:34
>>470 (っ´▽`)っ
wをつけて別人ぽく見せてるけどバレバレなんだよ。
頭悪いなあ。
質問させてください
C#でWebBrowserコンポーネントをフォームに配置して使っていたんですが、下記のコードを何度もTimerなんかで実行すると
タスクマネージャでどんどんメモリリークしていくのが確認できました。
Timerで呼んでいるのはこの一行だけです。
webBrowser1.Navigate("
http://www.google.co.jp ");
この部分をコメントアウトすると確実にリークは止まるので絶対にここが悪いんですけど
どのような対策を施せば解決するか教えてください。
//コメント//
webBrowser1をDispose()して毎回new WebBrowser()ってやってもやっぱりリークしました。
強制GCも併用してましたが、やっぱりだめでした。
>>471 は、実力はあるのに、性格が災いして周りがイエスマンばっかりになっちまうタイプな気がするなぁ。
あそこまで罵倒されるリスクを冒してまで部下も意見しようとは思わないだろうし。
言わなかったら言わなかったで、後から、
「なんで気付いたときに報告しなかったんだ!」って怒鳴られるんだろうけど。
WebBrowser・・・Timer・・・ あいつか
リストボックスについてなんですが、大量に比較する方法で困っています。 ファイル名なんかをリストボックスAとBに読み込み、その二つを比較してリストAにはあるのにリストBにはない、というものを見つけ出したいです。 この場合配列に格納してしまい、わざわざリストボックスを用意する必要はないと思います。 なので一応A配列とB配列にそれぞれ全て格納した上でリストボックスに一応表示させています。 Aの1番目の項目とBの全項目を比較し、Aの2番目の項目とBの全項目を比較し・・・とやっていくしかないんでしょうか?
488 :
側近中の側近 ◆0351148456 :2007/12/23(日) 16:01:26
>>485 (っ´▽`)っ
そだね。
「頭悪いなあ。」とか人を貶す言葉が先に来るから、
ついには、誰もついてこなくなる(彼自身窓際族になる)可能性もあるけどね。
この性格のままだと将来がないと思うよ。
今だけでしょ。周りがみなうなづいてくれてるのは。
COBOLしか知らないくせに自分が一番知ってると勘違いしてる中年おやじと
同じ末路を辿るんだろうね。
今ではCOBOLは使うけどな まあ語りたいのはわかるがスレタイ読めないような奴は何を言っても屑だろう
490 :
484 :2007/12/23(日) 16:08:33
>>486 どなたかとかと間違えてますか?
なんかやっていることがDoS攻撃じゃないのかって指摘が来そうなので、先に自分のやりたいことだけ言っておきます。
自宅ではIP電話対応のルータを使ってるのですが、その中にWebサーバが入っててログをHTTPで読めるようになっています。
そこで、定期的にログを読むプログラムを作って、SMTPで携帯電話にメール出すっていう不在電話通知機能を作ろうとしています。
常時タスクトレイに起動するような使い方を想定していますので、メモリリークが非常にやっかいで困っています。
どうかお力を貸してください。
>>488 いや、こいつ自身がリアルではいつも他人から「頭悪いなぁ」って言われてるから、
2chでイキがってるんじゃないかな。
コードを見る限り「実力がある」とはとても思えないし。
>>487 基本的にはそうだけど、ArrayListにしてContains()で検索しちゃえば少しはましでない?
アホばっかだな。
>>269 のような「やり方がわからないだけ」の質問に対して
技術や理屈ならべてるやつなんなの?w
495 :
側近中の側近 ◆0351148456 :2007/12/23(日) 16:16:42
>>482 お前さあ、意見にではなく
>>482 個人に対して、自演までして反撃されるほど
自分の指摘が的確で
>>272 に相当のダメージを与えた、とでも思ってんの?
幸せいっぱいだな。これからもお前の幸せを祈ってるからな。
499 :
484 :2007/12/23(日) 16:20:09
>>493 あぁ。まさにそれです!
Microsoftのページに書いてあったとは…。
WebClientで解決できるかもとは思っていたのですが、いかんせん使用した経験が無いものであまり手を出したくなかったのが現状です。
それで、WebBrowserがどうにかして使えるようになれたらいいなぁと思ってここで質問してました。
でもMicrosoftが定期的にアプリ終了させてくださいって言ってるくらいだからどうにもならなさそうですね。
WebClient勉強してみます!
500 :
側近中の側近 ◆0351148456 :2007/12/23(日) 16:21:29
>>497 (っ´▽`)っ
>これからもお前の幸せを祈ってるからな。
どもども〜☆
漏れは
>>471 が気に入ったんだけど、結局どのコードがいいの?
初心者に正しい道を示して下さいです。
一人で遊んでると、動けばいいや的なコードになりがちで悩みますです。
ほぼ丸一日の時間と、レス数 200 以上を消費して、結構盛り上がったねw
結局290の何が悪いのかさっぱりわからない俺初心者
わかってるならちょちょっと教えてやって
>>503 別に悪くないけど、それが自分の好みに合わないというだけで
必死で馬鹿にした挙句、突っ込みに耐え切れず
>>272 が逃げたというだけの話。
そしてさんざん偉そうにほざいた割には
>>314 は恥ずかしいバグ入りだったという
オチ付き。
なのでもう許してやって。
このコテ焼いてもらおう
>そういうのはさあ、普通削除するアイテムをリストなり配列なりにリストアップしといて
>まとめて削除するのが定石ってもんでしょ。
>こういうのはさ、知識というかパターンとして覚えることじゃなくて
>だれが考えても普通の知能があればそうするって程度の話だと思うぞ
最初のこの指摘で明らかに
>>471 見たいのも想定外ってのがわかる。
この時点では気づいてない。
だから誰かが
>>471 みたいなコードを書いても、
こいつは確実に腐ってるって指摘しただろう。
そんな状態で人のコードに馬鹿、頭悪い云々言いまくってたんだから、
言い訳しても無駄だし、こいつがアホだった、というだけのこと。
そんな揚げ足取りしてまで何を証明したいのかねえ。。。
って言ってお馬鹿には分からないよねたぶん。
定石はこうだ、とは言ったが
>>270 が「よくない」理由として定石と異なることを
挙げた覚えはない。
そうではなく、「よくない」理由はそれが直観的じゃないからだ、
とずっと言ってるでしょうが。
逆を言えば、あるコードが十分に直観的であればそれを否定する理由は 何もないということでしょうが。
直感か、芸術は爆発だ!見たいなものだな。 だれも賛同しない感性はただの独りよがり。
だから「直感」ではなく「直観」だよw 理科系の大学出てれば割となじみのある言葉じゃないかと思うんだが。。
はいはい、痛いからそのくらいにしたら
理科系の大学…
>そういうのはさあ、普通削除するアイテムをリストなり配列なりにリストアップしといて >まとめて削除するのが定石ってもんでしょ。 >こういうのはさ、知識というかパターンとして覚えることじゃなくて >だれが考えても普通の知能があればそうするって程度の話だと思うぞ
まあバグのある定石だけどな。
>標準的なプログラマならやっぱり普通こうじゃないの?
むしろ入社試験か何かで出して、
>>314 みたいなコードを書いてきたら
「うちはそんな標準的な(バグを見抜けない)プログラマは要りません」って
感じに使えそうだなこの問題。
参考:マイクロソフト米国本社の実地面接に行ったけど質問ある?
ttp://vipvipblogblog.blog119.fc2.com/blog-entry-105.html >例えば、linked-listにループが存在するかどうかを確認するコードを書き、
>それの効率性を答える問題や、linked-listを効率的に逆向きにする問題等が出ました。
割と有名問題が出ててびっくりした。
>>510 「直観的じゃない」なんて曖昧な脳内基準で言われてもねぇ。
ほとんどの人にとって、リストの後ろから消すなんてのは十分に直観的なんだけどなぁ。
あんたの脳みそが低性能だから直観でわからないだけのことをそんなに
グダグダと言う理由ってなんなの?
>書いてみたよ。
>listBox1.SelectedIndices.OfType<int>().Reverse()
> .ToList().ForEach(index => listBox1.Items.RemoveAt(index) );
>直感的に読めるかどうかは知らんけど。
直感…?
>俺ならやっぱり
>>290 みたいな(悪いけど)糞コードは書かないな。
>標準的なプログラマならやっぱり普通こうじゃないの?
バグあるけどね。普通はバグぐらいあってもいいよね。
>でも全部のコードがこの調子で書かれてたらかなわんよ。
>君自身がいってるように「積み重なる」から。
うん、バグあるほうがましだよね。
>君はコードを検証的に(要はデバッグ)よむ場合を想定してないんだよ。
>コメントなんか書いてあってもコードの正しさは保障されないだろw
うん、バグ入っちゃったよね。
>小学校のころ算数ができなかった子がプログラマになってるのかな。
算数ができたからバグなんかあってもいいんだよ。
「相対性理論は(俺に理解できないから)間違ってる!」っていうトンデモな人と同じ感性だよな。
いやそれはちがうと思うよ…
今回の話ってリストじゃなくてリストボックスの話じゃないの? リストボックスで複数削除で頭から消したらずれるなんて、みんな通る道だと思ったけど。 そのときに、消したときにはインデックスを増やさないか、後ろから消すかで分かれるだけな気が。
ってここC#だから微妙か。
525 :
側近中の側近 ◆0351148456 :2007/12/23(日) 18:54:51
(っ;д;)っ 私のために喧嘩しないで☆
単にこういうやり方の方が直観的だと思うよ、くらいの書き方なら 別にそこまで誰も突っ込まなかったと思うのに(バグはあったが)、 人を馬鹿にするようなことばっか言いまくった挙句それだから痛いんだよ。
527 :
側近中の側近 ◆0351148456 :2007/12/23(日) 18:58:00
(っ´▽`)っ でも、まあ新たな名言が出たからいいんじゃないか。 みんなレスに困ったら「頭悪いなあ。」を使おうぜ☆
>>510 バグを入れてでも「直観的」なことが大事だと思うなら、
ずっとそうやっていればいいんじゃない?
直観的じゃないからバグに気づかなかったなんていう揚げ足取りはしないからさ w
まあ、俺のチームにこんなのがいたら追い出すけど。
>>525 てめーもうざいんだよあwせdrftgyふじこ
追い出せない立場の身にもなってください><
「馬鹿って言う奴が馬鹿なんだい!」 という小学生の常套句が正しかったと確信した。
532 :
側近中の側近 ◆0351148456 :2007/12/23(日) 19:08:12
(っ´▽`)っ っていうか、この人のいう定石ってどういう基準なんだろうね っていうとまた話がこんがらがるね。 ちなみに将棋と囲碁の世界では定石とは、 騎士たちが数十年かけて築き上げるものであって、 自己流の指し方は定石とは言わないんだよね。 それ以前にC#に定石本ってあるのか? Cだとカーニハン先生 JavaだとGoF C++だとスコットメイヤーズ? かなぁ・・・。
533 :
側近中の側近 ◆0351148456 :2007/12/23(日) 19:09:19
(っ´▽`)っ というわけで、しつも〜ん!!! C#の定石本を教えて☆ はいはい、書籍スレいってきま〜す
534 :
側近中の側近 ◆0351148456 :2007/12/23(日) 19:10:02
(っ´▽`)っ
>>532 で誤字見っけ!!
騎士→棋士な
生きててごめんね☆
もう丸一日経ったぜ。元気だなあ
200レス近く読み飛ばした
>>521 確かに間違ってる。
今はM理論がもっとも有力と言われている
プログラミングやっててこの程度知識もないとは・・・・
>>538 もしかして NASA かどっかで GPS とかの組み込みプログラム書いてる人?
540 :
484 :2007/12/23(日) 19:55:53
WebClientで完成しました。 タグの構文解析やBASIC認証で少しはまったけど、何とかできたみたいです。 とりあえずWebのところではメモリリークなさそうです。 SMTPのところでなんか使用メモリ増えている気がするのですが…頻度的に問題ないってことにしておきます。 恐らくこれもコンポーネントのバグでしょうね。 お世話になりました!
>>538 依然としてマクロな範囲で相対性理論は理論と結果が合ってるわけだが。
>>538 プログラマはM理論は知らなくてもいいけど、初歩的なバグを入れないような
「直観的な」コーディングをする能力は必要だよね。
マ板でやれや糞ども
ListBox の削除処理を題材にした踊り子たちが去り、また新たな踊り子の登場か。
M理論で宇宙のはじまりをシミュレートしたいのですが C#でできますか?
こいつ等、まさしく出来ないマだなwww 視点が狭すぎる
点に面積はないだろ…
出来ないマどころか日本語ができない奴だな。 視野が狭いと言って欲しいところだ。
>こいつ等、まさしく出来ないマだなwww こういう台詞だけうれしそうに言うやついるよな
マ板でやれ
直感的でも何でも良いから1行あたりに使うメソッドを3つ以上入れられると 直感的にはわからなくなりがちだな
「直感」はNGワードだろw
「直感的」と「直観的」でそれぞれぐぐると、 直感的の方がはるかに多くヒットするな。 しかも、直観的だとぐーぐるさんに「もしかして: 直感的 ?」とまで言われる。 さて、どっちが正しいんだろう?
どっちでもええわ
>>553 調べてみたら、「直感的」は経験をベースにしてる一方、
「直観的」はそうではない第六感のようなものから発せられるようだな。
従って、コンテキスト依存であり、どっちが正しいという問題ではない。
このスレで最近使われた「チョッカン」に関しては「直感」が適切だろうな。
556 :
553 :2007/12/24(月) 02:55:43
粘着質だなぁwイブなのにwww
逆に考えるんだ イブだから粘着質なんだと
こういう不毛な議論に情熱の全てを注ぎ込んで、世間の雑音から自分を隔絶してるんだ。 余計なことを言うんじゃない。
まだくすぶってるしw
イブなのにプログラミングしてますがなにか? w
まあ、さっきヨメと(ry
それだけじゃなんなのでスレに合った話題でも。
JPEGファイルを読み込んでImageにするのに一番速い方法は?
素直に
Image image = Image.FromFile(filename);
もしくは
Image image = Image.FromFile(filename, false);
こうするのが今まで測ったうちでは一番速いみたいなんだけど、
useEmbeddedColorManagement の意味がよくわからない。
色管理情報って、どういう時についてるんだろう?
http://www.atmarkit.co.jp/fdotnet/dotnettips/597fastloadimg/fastloadimg.html ちなみにこれをやってみたら、かえって遅かった。
>>561 useEmbeddedColorManagement は主に BMP と PNG で効果がある (はず)。
BMP だと色管理情報を独自に埋め込めるし、PNG だとガンマ補正のパラメータがついてたりする。
M理論で美少女作りたいのですが C#を使って直感でできますか?
564 :
デフォルトの名無しさん :2007/12/24(月) 09:09:09
BitmapからRGB各色それぞれのbyte配列にするには、どうやればいいのでしょうか?
GetPixelで各画素のColorを取り出してそのR・G・Bを配列に入れましょう
メニューとかツールバーで標準項目を挿入すると名前が日本語なのが馴染めねえぇぇぇぇっ と思ったが、今までわざわざ英語にするために辞書引いたりとかアホなことしてたから どうせ個人的に作ってるだけだから、ここは一発、いままでの常識を覆して日本語で名前つけてみるか?
日本語スタートだとインテリセンス使いづらいけどな
>>564 unsafeでよければ、Bitmap.LockBits
LockBitsだってunsafe限定ってわけじゃないぜ
Marshal.Copyをつかう手もあるな。32bitRGBに変換しとくと計算が楽だ。
GetPixelは恐ろしく遅いので使えないものと考えた方がいい
>>566 名前って変数名のことか。
君が使う分には文句言わないけど、インテリセンスのうれしさ激減だから正直勘弁してほしい。
Migemo みたいなのと連携してくれるならいいけどさ。
少なくとも、自動生成する変数名のローカライズをするか否かの設定項目は欲しいところ。
このスレは業務で使ってる人の割合が高いみたいだな。
574 :
561 :2007/12/24(月) 13:33:31
>>562 なるほど、jpegじゃ意味ないってことね。
thx
他人に渡らないソースなら、どう書こうがその人の自由 そのアプリ固有のものなら、日本語にしたほうがわかりやすいこともある 前に規則的なアルファベットを2文字くらいつければ補完も効く
ハンガリアン記法の復活だねっ
漏れ、先頭に"_"を付けて _穂毛ToolStripMenItem みたいにしてる。
toolStripMenuItem穂毛 でいいじゃん
ちょこっとメンテとかならコピペでいいが ガリガリ書くときに日本語変換はつらくないか?
580 :
デフォルトの名無しさん :2007/12/24(月) 18:40:14
Webの開発でマルチスレッド機能って使うことあるんでしょうか?
知らない内に使われてる。 明示的に使うことはあまりない。 効果的に使える場面一応もあるんだけど 危険すぎて任せられないorz
>>581 レジストリにあるはずだからそれ書き換えればいけるはず
ただVistaで場所が変わったみたい(某デスクトップアクセサリで設定しても無視された)
>>583 回答ありがとうございます。
以下のあたりのレジストリ設定で変更できました。
HKEY_CURRENT_USER\AppEvents\Schemes\Apps\.Default\.Default
斜めに傾いた楕円を描きたいのですが 例えば Graphics g = PictureBox1.CreateGraphics(); g.DrawEllipse(Pens.Black, 10, 20, 100, 80); で位置(10, 20)大きさ100x80の水平な楕円が描けますが こいつにx, y座標 width, height の他に45度等と傾きの情報 を渡して45度に傾いた楕円を描くといったイメージの事は出来るでしょうか? DrawEllipseと同じようなインターフェースのメソッドが存在しましたら 御教示願います。
Transform系を使えばなんでもあり
>>585 初歩的数学もわからないのにプログラミングやってるの?
>>587 「初歩的数学」がわかることと、この問題での最適解を知ってることとは別だろ。
>>587 クリスマスに一人でム板だもんな
いちゃもんつけなきゃやってらんないよな・・・
おまえなんでこの季節だけ仏教徒だって言うの? おまえなんでこの季節だけ仏教徒だって言うの?
ブール配列から値が偽のインデックスの配列を取得したいのですが, すべてのインデックスを毎回利用するのではないのですべての値の評価をせず, Linqで必要になった分だけ取得していきたいとかんがえています. Linqでインデックス値を取得するサンプルが見つからなかったので教えていただけないでしょうか? やりたいことはこのLinq版です bool[] boolArray; list<int> intList; for(int i = 0; i < boolArray.Length;i++){ if(boolArray[i] == false) intList.Add(i); } intListを使用する
ドキュメントまだ読んでる途中だから、ひょっとすると出来るのかもしれないけど もとの配列のインデックスは取れないんじゃないかなあ。 どうしてもLINQでやりたかったら、intとboolの構造体を配列にしないと駄目だと思ってるけど。
>>591 外部にカウンタを持つしかない。下の例ではidx。
var boolArray = new bool[] { true, false, true, false, false };
int idx = 0;
var rs = from b in boolArray
let i = idx++
where b == false
select i;
foreach (var r in rs) Console.WriteLine(r);
最終行に追加 List<int> intList = rs.ToList();
これもあんまりスマートじゃないな。 var rs = from s in Enumerable.Range(0, boolArray.Length) where boolArray[s] == false select s; List<int> intList = rs.ToList();
596 :
591 :2007/12/25(火) 10:57:03
LinqではEnumeratorインタフェースでMoveNext()して次の要素をたどっているのでインデックスという考えがないのでないかということなのかな. Linqに関してはまだまだ勉強不足なので参考になりました.
IEnumerable<int> Hoge(bool[] boolArray) { for (int i = 0; i < boolArray.Length; i++) if (!boolArray[i]) yield return i; } LINQじゃないけどこういうのは?
>>591 SelectとWhereが同時に行えればいいんだけど
そういうオペレータは無かったと思うので、作るかこうするか。
var intList2 = boolArray.Select((Value, Index) => new { Value, Index }).Where(pair => !pair.Value).Select(pair => pair.Index);
599 :
598 :2007/12/25(火) 14:50:25
600 :
598 :2007/12/25(火) 15:02:40
クエリ式の方が好きな人はこちらをどうぞ。 var intList2 = from pair in boolArray.Select((Value, Index) => new { Value, Index }) where !pair.Value select pair.Index;
Enum型にボクシングされた列挙型の値をint型の値として取得するには リフレクションを使うしかないのでしょうか
Convert.ToInt32
603 :
601 :2007/12/25(火) 15:38:04
できました。ありがとうございます。
ただでさえC#関連スレが乱立してるのに、クエリ式質問スレが出てきそうだな。
intからuintへの型変換ってどうすればいいのでしょう? (uint)を省いて・・・
つかなんでキャスト式を省くんだ? オーバーフローも任意にできるのに
int CastProxyUInt32toInt32(uint val) { return (int) val; } とかw
>>607-609 レスありがとうです。
試してたと思ってたんですorz
すみません。試してたのはUInt内にあるメソッドだけでした。
611 :
デフォルトの名無しさん :2007/12/26(水) 11:50:30
マニュアルサイトじゃなく C#を一から勉強するのに向いてるサイトある?
ある背景色だけ指定したPictureBoxにいくつかの別のPictureBoxを重ねて 一枚の画像として保存させたいのですが、その方法がありましたら教えていただきたいです。 初歩的なことかもしれませんがよろしくお願いいたします。
614 :
611 :2007/12/26(水) 12:06:55
>>613 回答いただきありがとうございます。
とすると例えば背景を黒にしたい場合、背景黒い画像を用意しなければならないのでしょうか?
//Bitmap bmp1, bmp2;//貼り付ける画像 Bitmap bmp3 = new Bitmap(幅, 高さ); using (Graphics g = Graphics.FromImage(bmp)){ g.Clear(Color.Black); g.DrawImage(bmp1, 好きな位置); g.DrawImage(bmp2, 好きな位置); } bmp3.Save("保存先");
>>616 できそうです。
わざわざありがとうございました。
リストビューの中に進行メーターのようなのがグラフィックで表示されているソフトがよくありますが あれはどうやって作ればいいんでしょうか?
おーなーどろー
かすたむどぅろぉ
なんでMarshal.CopyにはIntPtrからIntPtrにコピーするオーバーロードがないの?
マネージドと関係ないならアンマネージドでやってろってことじゃね?
マーシャルは橋渡し屋さんだから。ごめん適当に言った
>>621 マーシャラの仕事じゃねえじゃん。
kernel32のCopyMemoryでも使えよ。
625 :
デフォルトの名無しさん :2007/12/27(木) 00:22:57
WindowsアプリでのHttpWebRequestの使い方で困っています。 現在、HttpWebRequestのGetResponse()メソッドで例外が出ていまして、 調べたところ、useUnsafeHeaderParsingがtrueになっていないせいだということがわかりしました。 んで、ASPだと下記のような感じで書けば良いらしいのですが、 <system.net> <settings> <httpWebRequest useUnsafeHeaderParsing="true" /> </settings> </system.net> WindowsアプリだとHttpWebRequestにuseUnsafeHeaderParsingプロパティが無く、 設定方法がわからず、止まっているという状況です。 どなたか、ご教授願います。
デリゲートに関する質問です。 外部からデリゲートの実行は出来るが、メソッドの代入は行えない、 つまりevent修飾子の逆のような性質を持ったデリゲートは作れるでしょうか?
>>626 デリゲート型でsetterなしのプロパティでも作れば
それってpublicなメソッドとどう違うの?
構文が違う
>>625 それ構成ファイル。
WinFormでもapp.configに書ける。
ASP.NETの場合はweb.configに書く。
632 :
631 :2007/12/27(木) 10:54:51
いやすまん勘違い
<html> <head> <title>MyMiniCity</title> </head> <body> <noscript> This site needs JavaScript. </noscript> <script type="text/javascript"> //<![CDATA[ var d = new Date(); d.setTime(d.getTime()+52727); var exp = d.toGMTString(); if( document.referrer != null ) document.cookie = "X-MV-Referer="+encodeURIComponent(document.referrer); document.cookie = "X-Ref-Ok=1;expires="+exp+";path=/" document.location.href = document.location.href; //]]> </script> <p><em>Please wait a few moments...</em></p> </body> </html> なんだろうこれ よくわかんないなぁ〜
635 :
625 :2007/12/27(木) 21:57:47
>>630 おぉ!ありがとうございます。
クライアント側の方にapp.configを追加したら行けました。
>>627 ありがとうございました。出来そうですね。
マルチスレッドに関する質問です。 Threadクラスを使って新たに作ったスレッドは、スレッド終了後にまたStart()できないのでしょうか? というのも、Startを再び呼ぶ前にJoin()メソッドを使用して終了するまで待っているのでスレッドは終了しているはずですが、再びStart()はできないです。 こういった場合、newしなおし前のは破棄する必要があるということですか?
Threadは基本使い捨てだよ
やはりそうですか。ありがとうございました。
>>637 なんかその発想ってオブジェクト指向の暗黒面を体現してるな。
Threadクラスはスレッドを抽象化したものに過ぎない。
間違ってたらごめん。
Threadクラスのインスタンスは参照されている限りそりゃ生きてるけど、
それが抽象化してる本当の「スレッド」は終了した時点で既に死んでる、
という風に俺は理解している。
時々見かける、Aクラスのスレッドが云々ってような言い回しを思い出した…
再びStartできるようにしてあったとしても 適切かどうかは知らないけどありえなくはないと思うけど 中にラップしてるものを自動で作り直すようなラッパーなんていくらでもあるでしょ
それをスレッドでやっちゃうとやばいよな
そうでもない
618さんではないのですが,私も現在作成中のアプリでListViewに プログレスバーを表示させることを考え OwnerDrawで ProgressBarRenderer.DrawHorizontalBarや ProgressBarRenderer.DrawHorizontalChunks を実行しようとしたのですが, Visualスタイルが有効でないといわれました. Application.EnableVisualStyles(); をはじめに実行しているのですがだめでした. OSはXPでクラシックスタイルで利用中なのでこれが原因だとはわかってるのですが, ListViewにProgressBarを表示することがクラシックスタイルではできないのでしょうか? それともProgressBarRendererをやり方が根本的に間違っていたりするのでしょうか? ご教授ください.
素直に自前で描画しろ
>>645 VisualStyle 系の描画クラスの一部は、ビジュアルスタイルが有効でないと例外が出る。
あんましお勧めしないがどうしても Windows と見た目を統一したいなら Win32 API を使うしかない。
MSDNライブラリに答えが書いてあると思うんだけど。。 読むつもりないのか文盲なのかその両方なのか・・・
649 :
デフォルトの名無しさん :2007/12/29(土) 00:10:20
思うだけならだれでもできる。 書いてあるなら証拠を示せ。
650 :
645 :2007/12/29(土) 00:18:16
ProgressBarRendererはクラシックスタイルではだめなようですね. graphic.DrawRectangleとかでプログレスバーもどきっぽいのは作れそうなので 自分で描画の方法をとってみたいと思います. すぐにいろいろな意見を書き込んでいただき,ありがとうございました.
//左上以外の角に線がうまく引けないのはなんでなんだ? using System; using System.Windows.Forms; using System.Drawing; class Hoge : Form{ private Pen pen; public Hoge(){ pen = new Pen(Color.Blue); Resize += MyResize; } protected override void OnPaint(PaintEventArgs e){ base.OnPaint(e); e.Graphics.DrawLine(pen,0,0,Width,Height); e.Graphics.DrawLine(pen,0,Height,Width,0); } private void MyResize(object sender,EventArgs e){ Invalidate(); } } class Fuga{ public static void Main(){ Application.Run(new Hoge()); } }
e.Graphics.DrawLine( pen, 0, 0, this.Width - 1, this.Height - 1 );
threadクラスとデリゲートをいろいろいじくってたらC#でメモリがどんどん減ってく・・・・・・orz 自分の不甲斐なさに泣けてきたぜ。
Width == 5, Height == 3 01234 0■■■■■ 1■■■■■ 2■■■■■ Point( 5, 3 )は領域外だ
>>654 ああ、
>WidthとHeightの値と実際のウィンドウサイズが異なるのはどうしてなの?
「クライアントサイズ」でぐぐる
ウィンドウサイズと言えばノンクライアント領域も含む(枠とかタイトルバーとか)
いや、そういう問題じゃないだろ。 ClientSizeの値を使えばちゃんといけるはず。
あ、被った。
>>655-658 int w = ClientSize.Width;
int h = ClientSize.Height;
e.Graphics.DrawLine(pen,0,0,w-1,h-1);
e.Graphics.DrawLine(pen,0,h-1,w-1,0);
とすれば良かったんだな
サンクス勉強になった
ClientRect使えよ。。
いまc++勉強して色々と覚えてきたのだが ちょっとGUIなプログラムをつくるためにC#を学ぼうと思うのだがいい書籍はないですか?
紙媒体でなくていいなら@ITのC#入門
VisualC#でGUI開発入門 的な本が欲しいの? 特に定番は無いんじゃね そういう本なら中身見て選びやすいから適当に本屋で好きなの選んだら
「ちょっと」GUIってWindows Formのコントロールのこといってるんだったら ほとんどのものは本なんて要らない気もするけどなあ。 DataGridView以外のほとんどのコントロールはMSDNライブラリ見ながら 実際つかってみればすぐわかるじゃん。 「ちょっと」じゃなくてGDI+とかフォントのディープな知識のこと言ってるんだったら ペッゾルトの本になるのかな俺は読んでないけど。
>>661 ちょっとならC++でやりゃあいいじゃん
C++できる人でも、C++/CLI覚えるよりはC#覚えた方が早いと思うよ
その後で、必用ならC++/CLIをやればいい。俺がそうだった。
その前にVB覚えようか
VBというだけで馬鹿にする気はないよ
C#/VB.NET/Java で一気に使える言語増やせる
C++/CLI は既存のソースを流用するために作られたようなもんだしな。 新規に作るなら C# でいい。
ちなみにC++とC++/CLIの差て定量的に言い辛いとは思うけど どの程度なんでしょ?>触ってる人
まんま C# + C++
>>672 せっかくC++/CLIスレあるんだから有効活用してみてはどうか。
>>672 C++は変態、C++/CLIは超変態
一度使って見ようと思ったことがあるけどref,^,%,*..等文法が変態すぎて挫折した
リスト作るだけで List<String^>^ list = gcnew List<String^>(); とかはないわ
^付けるくらいならC#やったほうがまし
>>673 >>675 の例で何となく雰囲気が分かりましたわ。
確かにもキモイですな。
>>674 C++/CLI使う予定も無いのでそれ程改まって聞きたかった訳ではw
話しの流れでC++/CLIが出てたんで、ちょっとどんなもんかなと思っ
た次第。
677 :
デフォルトの名無しさん :2007/12/30(日) 22:45:24
すみません、ちょっとお尋ねします。 VS2005 Expressで以下のようなコードを書いたのですが、 class MyControlClass: Panel { //内容 } class MyClass: Control { public MyClass() { this.BackgroundImage = Image.FromFile("pic.bmp"); this.Width = 10; this.Height = 10; this.Location = new System.Drawing.Point(100, 100); } } メインフォーム内メソッド { MyControlClass myCnt = new MyControlClass(); myCnt.Controls(new MyClass()); } Panelを継承したMyControlClass上にControlを継承したMyClassが表示されません。 MyControlClassが単なるPanelだと表示されたのですが・・・ どなたかわかる方いましたらご教授願えませんでしょうか。
>>677 (1) 君が求めている「どなたか」とはエスパーのこと。
(2) エスパーは存在しない。
(3) ゆえに君が求める「どなたか」は決して現れない。
>>677 その例だとPanelじゃ何故Controlであるのかがわからない。
Panelの中身でも見てみれば?
680 :
679 :2007/12/30(日) 23:15:11
一行目日本語じゃないな・・・スマン
681 :
677 :2007/12/30(日) 23:20:17
すいません。
やりたいことを説明しますと、Panelを継承した自作クラス上に
Controlを継承した自作クラスを乗せたいのです。
それから、
>>677 の
myCnt.Controls(new MyClass());
は
myCnt.Controls.Add(new MyClass());
でした。
すいません。
>>681 Controlがなんなのか考えよう。
としか俺にはいえないな・・・
>>681 デザイナが自動生成したコード見たことある?
684 :
677 :2007/12/30(日) 23:32:34
>>682-683 すいません、初心者なもので・・・
panelObject.Controls.Add(controlObject);
で、controlObjectのBackgroundImageが表示されないんでしょうか。
自動生成コードにはformObject.Controls.Add(panelObeject)
とやってますが、Controlでは無理なんですかね。
年末だってのにぐだくだ書いてないでソースアップしなはれや このままいっても情報小出しのせいで切れる御方がでよるとよ どうせformに追加してないとかじゃないのかと思いますが
686 :
デフォルトの名無しさん :2007/12/31(月) 02:05:45
指定したパスのファイルを指定して、削除をする機能のみ持った エクスプローラを作るという宿題を誰か作ってくれないでしょうか? listviewを利用して作ろうかと思ったが、 ファイルを選択→ファイル削除が・・・思ったよりも難しい
宿題は自分でやらんとあかんよ。 授業中に寝てたらあかんよ。 友達もつくっとかなあかんよ。 ファイルを選択 ←listView.SelectedItems で選択されてるListViewItemを取得して foreach等でループさせて取得 ファイル削除 ←ファイルならFile.Delete(), フォルダならDirectory.Delete
質問です。 部分文字列の取得を座標で指定する方法ってありますか?
>>688 部分文字列の座標って
TEXTの100pix目以降を取得とかか?
文字列全取得してフォントの文字ごとのサイズを元に削ればいいだろ
対象がTEXTじゃなくてpictureならフォントビットマップ使ってOCR一致させる
すさまじく無駄っぽいけどw
>>689 webbrowserで表示中のテキストのみを抜き出そうとしています。
webbrowser.Document.Body.ScrollRectangleで座標は取得できそうなので、
部分文字列に座標を指定できれば可能ではないかと考えているのですが・・・
そんな根本的なところを後出しされて答えられるかっての。
やっぱり日本の教育って問題あるよねw 690はたぶん691がどうしてクレームつけてるか理解できないと思うよ。 こんなにコミュニケーション能力 ―― 自分の発言が他人にどう聞こえるかを 考えながら発言する能力 ―― が欠如している人間が多いのは、国語の時間に 文学鑑賞しか教えてないからだと思う。
これはひどい
ワロタ
便乗で質問です。 ありますか?
>>693-694 って、ひょっとして692が691にケチつけてる、とか思ってるんじゃないの?w
これも教育の問題だね。
思ってないから心配しなくていいよ(笑)
>>696 どう読んだらその解釈が出来るんだ?
これも教育の問題だね。
これはひどい
マでやれゴミども
WebBrowser… 答えた後から出てくる条件… この符合が意味するものは
あいつか
タイムトラベラーだったんだよ!
mdbからDataSetを使って特定フィールドの値を取得するには どうしたらいいのですか? TEST.mdbのAテーブルの最終レコードのIDフィールドの値を取得したい。
705 :
デフォルトの名無しさん :2007/12/31(月) 19:31:03
706 :
デフォルトの名無しさん :2007/12/31(月) 19:34:37
ラムダ式で再帰って書けるの?
>>706 書けぬ事もないが非推奨。末尾再帰の最適かもやってくれない。
やりたきゃこうやる。
Func<int, int> trecv = null;
trecv = i => (i > 0) ? i + trecv(i-1) : 0;
Console.WriteLine(trecv(10));
自動プロパティに規定値を与えるにはコンストラクタで代入するしかないの? かえって見にくくなるような
自動プロパティなんて機能が追加されたんだw C#ってVB.NETのイベント周りみたいな、プログラマから明示的に見えない 暗黙的なコードやフィールドの存在を許さない方針かと思ってたけど、 そこら変のポリシーは思ってたより案外いい加減なのかな。
>>709 Linq関係で単純なプロパティだけのオブジェクトを量産する必要があるから追加したんだろう。
C#3.0の追加要素はほとんどはLinqのための機能でそれ以外にどういう使い方をして行くかは今後の課題だな。
>>709 そんなことはない
イベントのアクセサやデリゲートは1.0の頃から自動生成されるし
yieldとかクロージャとか使ったらそれこそ大量のコードが生成されるぞ
Graphics.MeasureStringを使いたいのですが、 Graphicsオブジェクトはどこから取ってくればいいでしょうか。 コントロールがないのでControl.CreateGraphcisやPaintEventArgsは使えません。 そのためだけにビットマップを作るのは気が引けます。
713 :
デフォルトの名無しさん :2007/12/31(月) 23:12:46
ゲーム作れますか? 3DのFPS
作れる
>>712 そういう質問は状況(何を何故したいのか?)をもう少し書かないと答え難いんじゃないの?
2.0以降ならTextRendrer.MeasureTextが使えそうなケースのようにも思えるけど、
その文章だけじゃよくわからんよ。
FixedSingleなフォームにStatusStripを追加したんですが、StatusStripの右下の三角の点点の フォームリサイズ用につまめる部分が消えなくて困っています。 フォーム全体はFixedSingleなのでマウスでつまめないようになっているのですが、 StatusStripの右下の部分だけがつまめてしまいます。 (リサイズはできないのですが、カーソルの形が変わる。) StatusStripのプロパティかと探したんですが、それらしいのが見つかりませんでした。 どうすればこのつまめる部分を無くせるのでしょうか。
ひどいバグだなあ
>>717 DocumentExplorerでメンバ一覧とか見るとき、
「メンバのオプション:フィルタ」の「継承されたメンバを含める」のチェックを外せば
表示メンバが随分減って探しやすくなるぞ。
継承されたメンバを含めるオプションって、 n階層上までに宣言されたメンバって指定ができたら便利なんだがなぁ
Delphiのヘルプみたいに実装されてるクラスごとに見れたらなあ。
フォームで、メニューなんかのボタンを表示するダイアログAを作っているとします。 このダイアログAは親のメインフォームから呼び出されます。 このダイアログAもサブメニュー的なボタンを表示する、子ダイアログBを作ります。 このとき、単純にダイアログAのボタンを押したらダイアログBをShowDialogする とやると、親フォーム、ダイアログA、ダイアログBがすべて表示されている状態になると思います。 そうではなく、ユーザから見ると、ダイアログAのボタンを押すと、ダイアログAがダイアログBに 書き換わるように見えるという動作をさせたいのです。 ダイアログAのクローズイベントからダイアログB表示とかやっても、どっちみち ShowDialogで処理が止まってしまうので、ダイアログAが消えないなと…。 Web画面なら、一個のフォームにすべてのボタンを配置して、いらないのは非表示にしてやれば良いかと思う のですが、c#の場合、どのようにするのが常套手段でしょうか?
formAで this.Visible = false; formB.ShowDialog(); this.Visible = true; ってすれば?
>>717 ちゃんと探せよ
StatusStrip.SizingGrip = False
PictureBoxに画像を置くとLocationは左上を(0, 0)として画像が配置されますが、 右下や左下などを(0, 0)とすることは可能ですか? 左上を(0, 0)として画像を配置するとPictureBoxに入りきらない大きさの画像は右側と下側が切れてしまいますが、 これを左側と上側が切れるようにしたいのです。 もし可能であれば方法を教えてください。よろしくお願いします。
727 :
725 :2008/01/02(水) 13:27:14
すみません。LocationじゃなくてPictureBoxの中の画像の位置です。 分かり辛かったら申し訳ありません。
オリジンを変えるんじゃなくて、オフセット設定したらどうか?
729 :
726 :2008/01/02(水) 14:15:15
>>728 レスありがとうございます。
オフセット設定でググってみたのですが、あまりピンときませんでした・・・。
もしよかったら詳しくオフセット設定について解説しているサイトなありましたら教えていただけないでしょうか?
申し訳ありませんが、よろしくお願いします。
普通に画像のサイズからPictureBoxのサイズを引いた位置をLocationに指定すればいいのでは
731 :
726 :2008/01/02(水) 15:27:32
>>730 レスありがとうございます。
それも考えたのですがPictureBoxのサイズを画像のサイズより小さくすると右下から切れていくのと
上部にメニューバーを設置したいという理由で断念しました。
すみません、すごい初歩的なことかもしれないんですが教えてください。 x = x > y ? y : x; これはどういう意味ですか? 検索しようにも何て検索したらいいか分からなくて困ってます。 よろしくお願いします。
x = MIN(x,y);
三項演算子でググレ
C#リファレンスでは?:演算子または条件演算子
736 :
732 :2008/01/02(水) 16:00:33
もしかして、ButtonのMouseClickイベントって、ボタンを右クリックしても発生しなかったりします? 左クリックだと発生してるんですが…。 Buttonで右クリックを判断したいときってどうすればいいでしょうか?
え?くるだろ?
>>738 MouseClickイベントの中で、ログファイルに( MouseEventArgs ) e.Button.ToString()
をはき出させるようにして、Buttonの上でかちかちやって見たんですが、
Leftしかログに残ってませんでした。
マウスの右ボタンが死んでる
来ないね。 「Windows フォームにおけるマウス イベント」参照。 MouseUp 辺りで代用したら?
ん?OSで違うのか、、つか.NET3.0だからか?
ああ、Buttonか・・・ Buttonで右クリック取ったら問題あるだろう 自力でMouseUpでクリック発生させれば
そもそも右じゃ引っ込まないボタンなんだから取れなくて当たり前。 質問者は何がしたいの?もしかしてMouseDownを取りたいんじゃ?
フォームを透明にして見えなくてボタンだけ浮かせて、ボタンを右クリしたら フォームを閉じるという動作をさせたかったのです。 MouseDownで取ることにします。 ありがとうございます。
そのインターフェースの使い方は間違ってないか?
>>745 MouseUpの方が違和感ないと思うぬ。
748 :
デフォルトの名無しさん :2008/01/02(水) 20:43:44
2008の方がいいですか?
はい
750 :
デフォルトの名無しさん :2008/01/03(木) 05:24:58
SslStreamを使用してSSL通信するソフトを作っているのですが、 切断時にClose-Notifyを送信するにはどうすればよいのでしょうか? 単純にSslStream.close()メソッドを呼ぶといきなりFIN送信してしまいます。
751 :
デフォルトの名無しさん :2008/01/04(金) 05:20:35
最近、構造体って全然良いことないなぁと思うようになった。 最初は、データの定義は全部構造体でやってたんだが。 値型だからa=bってやったらオブジェクトが毎回コピーされてバグも少ないと思って。 でも、構造体の中の配列とかで参照型が絶対混じるし、むしろ全部参照型にするよりややこしくなって よけい思わぬバグを産むことにきづいた。 最近はデータの定義もほとんどclassにしてMemberwiseClone()使ってコピーと参照渡しの 使い分けができるようにした。 構造体の利点ってローカル変数として一時的に使う場合にclassより高速ってだけで、 メソッドの参照渡し以外はコピーしかできなくて柔軟性にかけるし、ボクシングとかすると往復二回はコピーされるから参照渡しより遅くなるし。 やっぱりjavaみたいに全部参照でやった方が安全確実じゃん。
752 :
デフォルトの名無しさん :2008/01/04(金) 05:45:21
CからC#に移ったら継承でつまづきました。 class Class1 { public string x = "x"; public string Get() { return x; } } class Class2 : Class1 { public string x = "y"; } とすると、 Class2 class2 = new Class2(); MessageBox.Show("Get():" + class2.Get()); MessageBox.Show(".x :" +class2.x); の結果が、 Get():x .x :y となります。Get():y となる様にするにはどうしたらよいでしょう? 継承したクラスの中のメソッドで継承元と違う値を使いたいのです。 virtual,override,newと試してみたのですが望む結果になりません。
>>752 class Class2 : Class1 {
public Class2() {
base.x = "y";
}
}
>>752 オーバーライドでできるはずだが
class2の中で
public override string Get()
{
return this.x;
}
>>753 ,754
朝っぱらからありがとうございます。どっちの方法でもいけました。
ただ、今回の場合、実際にはGet()の中に長めのコードが書いてあり、その中の1つの変数だけを
変更して使用したいのでbase.xの方でやってみます。
何時間も調べてわからなかったのでほんとに助かりました。まだ調べるためのキーワードすら
うまく選べない状態です。
名前が似てるから簡単にわかりそうと思って始めたのに、ぜんぜん違うもんですね。
途中でxを変更しても追従できないけどいいのか? xをprotected virtualなプロパティにして派生クラスでオーバーライドすれば?
>>756 今回の場合、途中で変更しないので問題ありません。が、変更不可能とは思っていませんでした。
正直いいまして言葉の意味がさっぱりわからないのですが、いまからじっくり調べてみたいと思います。
フィールドをvirtualに出来ないのはC++も一緒だと思ったけど。 C++でも隠蔽すればこれと同じ問題がおきるだろ?
>>751 確か、MS自信の方針でも、
サイズが数バイト以下で、絶対継承しないと分かってて、
MemberwiseClone 相当のことをよっぽど頻繁にする場合を除いて、
構造体は使わない。
あと使うとするとP/Invokeがらみくらいか。
P/Invokeでも大抵の場合classで事足りるけどね
ベクトル型をクラスで作ったら死ぬけど そういう特殊な用途に限るな
まあ値なら値型で表現するのは当然だしな 固定小数点数型とか
Cで下のように構造体に前後のポインタ持たせてたりしたやつって C#だとどういう実装がいいのかな? 配列を動的に増やすと部分削除が気持ち悪いんだけど struct hoge{ char hogehoge[1]; hoge *beforptr; hoge *nextptr; };
LinkedList使えば
自分でやるなら構造体じゃなくてクラスを使う でもLinkedList優先
あるprotected struct hogeをメンバに持つクラスAがあり、それを継承したBがあります。 Aのhogeは宣言時に初期化されていません。 そこで、Bのメソッドの中で、hogeが初期化されてるかどうかを知りたいのですが、 なにか良い方法はあるでしょうか。 クラスではないのでnullで判定できないので…。Javascriptでいうところのundefのような ものはないでしょうか。
メンバの構造体のインスタンスは自動で規定値に初期化されるけどそういうことではない? Aをいじれるんだったら、hoge? (Nullable<hoge>)を使うか、 Aに初期化されたかどうかのフラグを付ける
>>768 > メンバの構造体のインスタンスは自動で規定値に初期化されるけどそういうことではない?
お、そうなんですか
知りませんでした。ありがとうございます。
C#の#はC++にさらに++を付けたため、 ++ ++ = # となったと聞いたのですが、本当なのでしょうか?
その通りです ちなみに#(ナンバー)と書いてシャープと発音するのは C#の七不思議のひとつです
# が ++++ に見えるって言うのは後付じゃなかったっけ? C# 以外にもいくつか候補があったけど # が ++++ に見えるから C# にしたって。 ナンバーをシャープの代用にするのはよくあること。
皆さんありがとうございます。本当だったんですね。 >「COOL」(C like Object Oriented Language:Cライクなオブジェクト指向言語。クール) これもかなりハイセンスですね。
インデクサを持つクラスの要素の入れ替えを行おうとAのようなメソッドに値を渡そうとしたのですが、 「プロパティまたはインデクサを out か ref のパラメータとして渡すことはできません。」 と警告を受けてしまいました。 インスタンスとインデックスを渡して変更しようと思いBのようなメソッドを作成したのですが、 「角かっこ [] 付きインデックスを 'T' 型の式に適用することはできません。」 といわれてしまい、やはりうまくいきません。 インデクサを持つクラスでも利用可能なように拡張するためには、これをどう変更したらいいのでしょうか? // A public static void Swap<T>(ref T LeftParam, ref T RightParam) { T temp; temp = LeftParam; LeftParam = RightParam; RightParam = temp; } // B public static void Swap<T>(T Target, int LeftIndex, int RightIndex) { T temp; temp = Target[LeftIndex]; Target[LeftIndex] = Target[RightIndex]; Target[RightIndex] = temp; }
>>775 Aはインデックサだけでなくプロパティは全部ダメだろ。
BはTがインデックサをもつクラスの型なのかインデックサが返す(設定できる)値の型なのか混乱しとるよ。
>>775 一般のインデクサは諦めて、Bの引数の型をIList<T>にすれば?
大抵それで事足りる
そもそも俺には775の言ってる意味がよーわからんのだが・・・。 ここって正月休みの間に俺以外みんなエスパーになったんだろうか
インデクサに対応したSwapって無理?ってだけだろ? さすがにこれはわかるよ
すごーく遅くなってもいいならリフレクション使えばできるけど
>>776-780 沢山のレスありがとうございます。
何故かインターフェースには頭がいきませんで、778さんの方法でとりあえずは問題なく動くものになりました。
ただ一般のインデクサには無理なんですね、これはちょっと意外です。
なんにせよ想定した動作は実現できました。ありがとうございました。
>>779 わかりづらい表現で申し訳ございません。
780さんの仰るとおりです。簡潔に表現できるよう精進します。
VBからなら呼べるぜ インデクサは無理だったかも知れんが。
Swapごときに遅延バインディングしてたらパフォーマンスがえらいことになるな
実際にはコンパイルエラーになるが hoge[n]がindexerとすると x = hoge[n] は x = hoge.get_Item(n) hoge[n] = x は hoge.set_Item(n, x) になるんで、ref hoge[n] はナンセンスということになる。
今までVBAしかさわったことのない初心者ですが VBでもできたdebug.printに当たるものがc#ではどの記述になるのでしょうか? つまらない質問ですけど教えてください
Debug.Print Debug.WriteLine
>>786 using System.Dianogstics; があれば Debug.Printがつかえるぞっと。
ただ一応、Debug.WriteLineの方をすすめる。
>>785 VBならシンタックスシュガーでそのナンセンスなこともしてるな。
つうかぶっちゃけナンセンスとかどうでもいいし。
プロパティに+=演算とかもできたよな確か。
そういうことやってる言語は get して set する形に変換されて実行されたはず。
なんだ結局これでいいじゃん T t1 = Target[0]; T t2 = Target[1]; Swap(t1, t2); Target[0] = t1; Target[1] = t2; ・・・・なんか無駄なことをしてる気がする。
static void Swap<TList, TIndex, TItem>(TList left, TIndex leftIndex, TList right, TIndex rightIndex, Func<TList, TIndex, TItem> get, Action<TList, TIndex, TItem> set) { TItem tmp = get(left, leftIndex); set(left, leftIndex, get(right, rightIndex)); set(right, rightIndex, tmp); } 使い方:Swap(Target, 0, Target, 1, (a, i) => a[i], (a, i, item) => a[i] = item); じゃあこれで
バックグラウンドで実行とかいうのやると動かなくなるorz それはともかく質問 C++をちょっとかじった身でC#に入りました。 とりあえずデザイナとデフォのフォームのコンストラクタに書いてあったInitializeなんちゃらという辺りのとこも把握 エントリポイントはあえて言うならデフォでいうところのForm1_Loadかというところも把握 C++ですとクラスを宣言定義し、クラスの宣言定義とは別のmain()なんかの中でオブジェクト作ってそいつらを使って・・・という感じですが C#だとクラスの中でそれを・・・となんだかこんがらがっています とりあえずForm1_Loadをmain()と考え、Form1クラスの外で色々なクラスを宣言定義していくのがベターなのでしょうか? 要するForm1_LoadをエントリポイントとしてC++ぽくやっていいんでしょうか? まずC++もかじった程度なのでそこに認識の間違いがあるかもしれないですがorz
イベント駆動型ってのを知らないとな それとその考えでいくとForm1クラスをどうこうするときつまりそうだ
>>795 C#のエントリポイントもMainだよ。
エントリポイントはProgram.csにあるMainメソッド そこでForm1のインスタンスが作られてメッセージループが開始される
>>795 とりあえずコンソールアプリケーションから作ってみろ
WPFではMainも隠されるようになってるな
文面から、言語云々の前にWindowsのソフトを作ったことがないように思える。 〜をされたら〜をするというイベントドリブンの考え方になってる? って書いてたら似たようなレスが既にいっぱいついてるな
ああ、なるほどorz なんか違和感があると思ったらそういうことだったんですね いまいちうまく解説サイトが見つからないので本でも買ってきて基礎からやりなおしてみます
Windowsアプリケーション、確かに作ったことないですorzそっちかあ
this.Load += new System.EventHandler(this.Form1_Load); こういうので使う人のアクションに応じて動いたりするのをどうこうするってことかな・・
805 :
デフォルトの名無しさん :2008/01/06(日) 16:04:55
ジェネリックのリストを利用して、データの管理を行っています 指定したidが、現在のリストの長さよりも長いとき、Capacityプロパティを利用してリストの長さを伸ばして、そこにデータを代入しようとしています。 やってみると、ArgumentOutOfRangeExceptionが表示されてプログラムが停止します。 正直これであっていると思うのに、.NetFrameworkのバグでしょうか? if(ChangeList.Capacity>id) ChangeList.Capacity=id; ChangeList[id]=object;
>>805 >正直これであっていると思うのに、.NetFrameworkのバグでしょうか?
その自信はどこから来るのか知りたい。
なんのリストを使ってるか知らないけど、大きさ10なら添え字の範囲は0−9だ。10は範囲外。
その使い方でリスト使う意味がわからん 配列使っても一緒だろ
配列はリサイズできないじゃん
Array.Resize
参照が取り替えられるから、別のところで参照してたら面倒だろう。
ああそれはそうだな
>>805 言ってることとコードが合ってなくね?
それにまずCapacityの意味が思ってるのとは違うよ
単に内的にサイズ拡張しないでも追加できる数にすぎないよ
.Length-1を越えて添え字アクセスしたらそりゃArgumentOutOfRangeExceptionが出るわな
Dictionary使えば?
×Length-1を越えて ○Count-1を越えて ですた
815 :
807 :2008/01/06(日) 17:41:09
すいません、やっぱり私の間違いでした。 反省してきます。
初心者なら誰もが通る道だな>処理系のバグを疑う
ttp://jp.rubyist.net/magazine/?0021-RubyWithCSharp ↑を参考に、C# から Ruby を動かしています。
rb_funcall で Ruby のメソッドを呼び出したとき、
メソッド内で例外が発生すると、
System.AccessViolationException が発生して、
アプリが終了してします(try{}catchでは補足できません)。
VALUE result = Ruby.rb_protect(delegate(VALUE self)
{
return Ruby.rb_funcall(Ruby.Qnil, Ruby.rb_intern(name), Param1, Param2);
} Ruby.Qnil, ref state);
としてみましたが、結果は同様でした。
rb_funcall により Ruby 内で発生した例外を C# 側で補足することはできないでしょうか?
>>817 Ruby側(C#とのインターフェースになるMethod)で例外処理して処理結果コード返すのが安心で普通だと俺は思うけど・・・
よく知らないけど、CならそのRubyの例外を捕捉できるの? できるんだったらC++/CLIでラップしてみるとか
レスありがとうございます。
>>818 現時点でも実行速度に問題ありなので、Ruby側の処理はこれ以上増やしたくありません。
でも、アプリ落ちるよりはいいので、対策がみつからなかったら
その手でいこうと思います。
>>819 Cでなら817のように書くことで例外を補足できるようです。
(rb_protect のなかで setjmp、rb_funcallのなかでlongjmpするようです)
ただそのためだけにdllを増やしたくない、
できれば、C#だけで処理を行いたいというところです。
p/invoke って setjmp/longjmp する関数ってうまく扱えないんでしょうか?
(ぐぐりましたがよくわかりませんでした)
821 :
デフォルトの名無しさん :2008/01/07(月) 00:58:18
c#2008と2005で大きく変わったところを教えてください
スクリーン最前面に文字列のみを表示させるプログラムを作りたいのですが、 見やすいように縁取りして表示させたいです。 で、下記のコードでやるとペンの縁取り分が表示に含まれません。 ペンの描画範囲までRegionを広げる方法ないでしょうか? Region指定ではなく、TransparencyKeyでウィンドウ背景色を 指定すると、理想の表示になるのですが、 レイヤードウィンドウになってしまい、 他の利用ソフトとの相性が悪いようで避けたいです。 Font font = new Font("MS Pゴシック", 72); GraphicsPath gp = new GraphicsPath(); gp.AddString("テスト", font.FontFamily, (int)font.Style, font.Height, new Point(0, 0), StringFormat.GenericDefault); Graphics g = this.CreateGraphics(); Pen pen = new Pen(Color.Black); pen.Width = 5; g.DrawPath(pen, gp); g.FillPath(Brushes.White, gp); this.Region = new Region(gp);
AutoResetEventクラスに関する質問です。 このクラスのWaitOne()は、このメソッドを呼び出したスレッド(Aとする)をSet()が呼ばれるまで止める役割があるんですよね? スレッドAが止まっている時のThreadStateはどうなっているのでしょうか? というのも、別のスレッドで、 while ((スレッドA.ThreadState & ThreadState.Running) == ThreadState.Running) Thread.Sleep(1); と記述したところ、プログラムが止まってしまったもので。
>>824 そら、Runningだからだろう 常考
ちょっと考えれば、WaitOne()で止まってる時にどんなステータスになっているのかを
デバッガで見てみるなり表示するなりしてみれば人に聞かなくてもわかるだろ・・・
>>817 >>820 rb_protect版を試してみたけどAccessViolationException起きなかったよ。
もうちょい再現方法プリーズ。
>>825 もしかしてRunningってスレッドが終了した後でもStartする前でもない場合全部Runningなのか・・・
勘違いしてました。
となるとステータスはbackground と WaitSleepJoin だったので、WaitSleepJoinを!=で比較してみます。
form1内に設置されたボタンをクリックすると、新規フォームform2が生成されるようにしたいです どうしたらいいでしょうか? 開発環境はvisual C# 2005です
>>828 Form2 を作ってあるのなら、ボタンのハンドラで new して Show() とか
>>829 ごめん、こんなかに書いてみて。
form2はクラスの追加から作ればいいですか?
private void button1_Click(object sender, EventArgs e)
{
}
>>830 プロジェクト右クリックの追加でWindowsフォームってあるべ。
Form2 form2 = new Form2();
form2.Show();
一番簡単な例
>>832 ありがとう。
例のコードを
private void button1_Click(object sender, EventArgs e)
の中にいれてみた。ボタン1をクリックしてもformが生成されるんだけど
form1をクリックしてもfrom2が複数生成されちゃう・・・
Form1のClickイベントを調べる仕事に戻るんだ
>>833 解決
form2が表示されてる間、form1をクリックしてもform2のタイトルバーが点滅して
アクティブウィンドウの変更を許可しないプロパティってどれだ?
あと、ボタン1を何回もクリックして何個もform2が生成されるんだが、これも1個だけにしたいんだ。
プロパティではなく、Show()の代わりにShowDialog()
>>834 その調子で全部聞くつもりかよ。
Show()の代わりに、Showdialog(this) とか。
ShowDialogを使うと、Form2を閉じるまでForm1を操作できないから、
>>835 も解決
少しは自分でヘルプを見ろよ Show()を調べればすぐとなりにあるだろうが とっかかりを聞くのはいいけど、 そのペースで完成までずっと書き込み続ける気かよ
>>837 ごめん、ぐぐるより楽だったからつい。
つかvisual C#の解説ページあったら教えてほしい
ぐぐったけどあんまり見つからないんだよね
ITProのやつだっけ?評判よかったの
@ITのほうか、似てるからよくわからんw
ため口でワロタ まさにゆとりw
まさにゆとりだけど なんかほのぼのしてるのはなんでだ
意味がわからん。 お前さんが一人で「ゆとり」だの「ほのぼの」だの意味不明なこと言ってるだけだろ。
自覚ありならこんなはずないだろ 開き直るのも自覚なしを嘲笑われるのも子供の特権だよ
>>826 def foo
s="FOO"+nil
end
↑を rb_eval_string_protect しておいて、
>>817 を使って、
foo を起動するとこちらでは落ちます。。。orz
テンプレ読めと書こうと思ったら、 いつのまにかテンプレが… このスレだけなのか?
Part19からテンプレに外部リンクがなくなってるな
こんだけあれば本なくてもよさそう?最初うちは
自分で書いといてなんだが、1,2番目は読み終われない気がする。
軽く荒れてるようですが・・・ folderbrowserdialogで選択したディレクトリのフルパスを文字列として取得して テキストボックスに表示するにはどうしたらよいでしょうか ご教授お願いいたします
this.textBox1.Text = fbd.SelectedPath;
どなたかLINQ to XMLの性能を測定されたかたいらっしゃいませんか? XmlDocumentをXPathを使って色々処理する場合と XDocumentをLINQを使って処理する場合でどのぐらい 実行速度に差があるのでしょう? 内部でXPathを使った場合とほぼ同等のコードに変換されているなら ぜひLINQのほうを使いたいのですが・・・
あれ。もう .NET のベンチマークって公開してもいいことになったんだっけ?
C#で作るソフトの外観が味気なくて使う気がしないと嫁に文句を言われています。 ウィンドウズメディアプレーヤーみたいに、見た目がいい感じのソフトを作るのは C#でも可能なのでしょうか? スキンで外観変更できるソフトとか見かけるけど、どうやってるんだろう?
WPF使え
初心者ですが教えてください。 これで詰まって3時間あまり。。。 ArrayListにクラスのインスタンスを追加して foreach文で追加したインスタンスのメンバ(Item)に アクセスするようにした場合はコンパイルが通り期待に通り動作するのですが ArrayList[0].Itemのように個別にインスタンスのメンバに アクセスした場合はコンパイルエラー「'object' に 'Item' の定義がありません。」となってしまいます。 ArrayListに追加したインスタンスのメンバの値を個別に取得するにはどうすればよいでしょうか? お願いします。
キャスト
>>863 ((Hoge)ArrayList[0]).Item みたいにキャスト。
もしくは List<> を使う。
866 :
863 :2008/01/08(火) 00:06:36
例) こんな感じです class Item { public string Item1; } class MainClass { public static void Main() { ArrayList Items = new ArrayList(); for (int i = 0; i < 10; i++) { Item item = new Item(); item.Item1 = i + " これはItem1"; Items.Add(item); } Console.WriteLine(Items[0].Item1); // ←これではコンパイルエラー「'object' に 'Item1' の定義がありません。」となってしまいます。 // foreach (Item i in Items) // { // Console.WriteLine(i.Item1); ←これではコンパイル通ります。 // } } }
>>860 それを自分で作れるかどうかが嫁の尊敬を勝ち取れるかどうかにかかってる。
がんがれ。
C#で可能なのかという話なら、可能だ。
869 :
868 :2008/01/08(火) 00:11:59
すまん 本か何かでArrayList使うと書いてあるんだったら仕方ないけど、 実際に自分でなんか作るときはArrayListは忘れていいよ List<T>だけでおk
870 :
863 :2008/01/08(火) 00:15:39
ありがとうございました。 Console.WriteLine(((Item)Items[0]).Item1); とすることで解決できました。 List<>も使ってみたいと思います。 本当ありがとうございました。
>>861 WPF知らなかったので調べてみました。
WPFには、.NET Framework3.0以上が必要のようですね。
Windows2000でも動作させたいので無理みたいです。
>>867 嫁の尊敬は別に欲しくないんですが、出されたお題をクリアできないのはむかつくので調べてるところです。
つーか、C#で、嫁にスキンを適用出来るとありがたいのですが。
>>871 残念ながらC#で嫁にスキン適用は不可能。
嫁をアンインストしてクリーンインストするしかない。
子供できまくり…
>>870 なんだろう。ネーミングセンスが悪くないか?
Itemsって使わないほうがいいと思うよ。
それにItemのなかにItem1ってメンバー作るのもどうかと。
>>850 static void Main(string[] args)
{
VALUE state = 0;
Ruby.ruby_init();
const string funcdef =
"def foo\n" +
"s=\"FOO\"+nil\n"+
"end";
Ruby.rb_eval_string_protect(funcdef, ref state);
VALUE hoge = Ruby.rb_intern("hoge");
Ruby.CallbackArg0 func = arg => Ruby.rb_funcall(Ruby.Qnil, hoge, 0, 0);
VALUE result = Ruby.rb_protect(func, Ruby.Qnil, ref state);
GC.KeepAlive(func);
}
これで再現しなかったよ。
msvcrt-ruby18.dll(ruby-1.8.5-20061204-i386-mswin32.zip) + .NET 3.5 + Vista (x86)
876 :
875 :2008/01/08(火) 00:46:17
>>876 気になってたんで乙wやっぱりGC周りか。
でも要求はRuby側での例外をC#で補足じゃないのか?
WindowsFormsに比べてWPFってなんであんなにショボイの? あれじゃあ使い物にならないじゃん。
menuStripに『ファイルを開く』の項目を作ってファイル操作したんですが、 メニュー項目が自動で閉じてくれないので邪魔です。 フォームのどこか別の場所をクリックするまでそのまんま。 自動で閉じるようにする設定とかないんでしょうか?探してみたけど見つからず...
visual C#ってメッセージダイアログのコントロールってないのですか? OKボタンをクリックしたときにピコン!って音とOKダイアログを出したいのですが
>>880 using System.Windows.Forms;
MessageBox.Show("ピコン!");
>>879 どうやってやった?
Clickのハンドラだと閉じるけど、MouseDownだと閉じないな。
>>882 普通にクリックで。
private void openToolStripMenuItem_Click(object sender, EventArgs e)
{
ファイル開くよ();
}
こんだけ。
>>882 自己解決しました。
子要素があるとダメみたい。知らなかった。
『ファイル(F)』 | 『開く』−『Unicodeで開く』 『ShiftJISで開く』 『EUCで開く』 こんな感じで、『開く』をクリックすると、前回と同じエンコードで開く、というのが やりたかったけど、メニューが閉じてくれないので、 『ファイル(F)』 | 『開く』 『エンコード指定して開く』−『Unicodeで開く』 『ShiftJISで開く』 『EUCで開く』 こんな感じにしました。エンコード判別は難しそうなのでやめで。
へたれるなw TextEncでぐぐれ クリックのハンドラで フォーカスをどこかに移すとか 開く.DropDown.Close();するとかいろいろあんだろ
でもサブメニューが開く項目をクリックできるなんてこと 見たことないから886上のようなことはやめてほしい、個人的には。
メニューに▲マークがあったら、まったくクリックしないでサブメニュー出してて クリックできることに最後まで気が付かないか、サブメニューを早く出そうとして クリックして、いきなりダイアログが出て驚くかどっちかだろうなw
890 :
デフォルトの名無しさん :2008/01/08(火) 18:17:54
和洋問わず、C#で DirectSound3Dのライブラリってご存知の方おられます? すんません、楽しようとしています。
MDX
主観でいいのでC#のオヌヌメ解説本を教えてくれないか マイクロソフト公式解説書も一杯あるし どれがいいのか良く分からない orz
正直どれも微妙 他言語を何か修めて、それからじっくり逆引き辞典でも買ってやるのがいんじゃないの そこまでC#にかけるべきかは微妙
こんばんは Visual C# Express EditonではWindowsサービス アプリケーションは作れないものですか?
896 :
895 :2008/01/08(火) 21:11:14
<<895 2005です
テンプレートが無いだけ 作れる
898 :
895 :2008/01/08(火) 21:19:07
>>897 ご回答ありがとうございます
希望が持てました
C#の基本的な文法の勉強が終わったのですが どんなソフトウェア作成にチャレンジすべきですかね? 勉強がてらなんかまとまったソフトウェアが作りたいのですが、 迷っています。 みなさんはいろいろな言語を覚えたてのころ どんなソフトウェアをつくりましたか? おしえてください
仕事に使うなら蔵書管理とか家計簿 趣味やゲームに使うならもぐらたたきかじゃんけんゲーム
>>891 ,892 d!
やっぱりマネージ怒を使うんスすね!割とお手軽に使えそうなんでよかったです
でも2.0でXNAに行ってしまったんですね・・・
コマンドラインアプリでも作れば隠者ね。
基礎体力付けるなら簡単なゲームがいいと思うよ
オセロや将棋作ったよ。
858ですが、今日LINQの性能テストしてみました。 予想に反してXPathを使うよりもLINQのほうが早い…。中でどうなってんだか。 XmlNodeList nodes = doc.DocumentElement.SelectNodes("root[contains(elm, 'test')]"); int count = nodes.Count; と var nodes = from elm in doc.Root.Elements("elm") where ((string)elm).Contains('test') select elm; int count = nodes.Count(); だったら下のほうが1割ぐらい早かったです。 LINQ初心者なんで、下の文がベストかどうかは知りませんが。
XPath一つ試したところでなんの性能評価にもならんな
List.ForEachみたいなメソッドはEnumerableクラスにないの? foreach書くのが面倒になってきた
visual C#ってMySQLとは通信できないの?
できますよ
Form1.cs内のボタンクリックイベント内に作ったコントロールのプロパティ、もしくはstring文字列に form2.csからアクセスするにはどうしたらどうしたらよいでしょうか?
>>909 visual studio 2005 Express Editionでも対応してる?
というか、この開発環境のデータベースマネージャみたいなのから接続できないの?
>>911 プロパティやイベントの意味が解ってないんじゃない?
もうちょっとC#自体の勉強した方が
>>913 書き方がまずかったかなぁ、まだ勉強して3日目です。
From1の中のテキストボックスのtextの文字列を
Form2の中のある部分で参照したいんです。別に値を変更とかはしなくていいです。
足りない要素があるならいってください、調べて追加します。
public string MyText { get { return this.textBox1.Text; } } こういうプロパティをForm1に追加する。 テキストボックスをpublicにするという手もあるけど良くない。 Form2に定義したプロパティやコンストラクタでForm2にForm1のインスタンスへの参照を渡す。 Form1のインスタンスへの参照がform1という変数に入ってるとして、Form2内から form1.MyText とすれば取得できる。
>>915 >Form2に定義したプロパティやコンストラクタでForm2にForm1のインスタンスへの参照を渡す
ごめんなさい、ここをもう少し詳しく教えていただけないでしょうか?
オブジェクト指向は苦手でして・・・
>>916 まずはオブジェクト指向について少しは勉強することをお勧めするよ。
基本的な用語の意味がわからんと、質問もとんちんかんだし
回答されても理解できない。
>>917 それはよくないアドバイスだと思うな。
初心者は、わからない部分はとりあえずおまじないだと思って
作りたいものをどうにかして作ることから初めて、
動くプログラムを何個か作ってからオブジェクト指向について
勉強するっていう流れのほうがいい。
GOFのデザインパターンを、オブジェクト指向を覚えたてのプログラマが
学んでも眠いだけだけど、ある程度我流で何本かソフト作ってきた
人が学ぶと目からうろこだったりすることと同じさ。
>>916 >>915 はこういうこと
class Form1 {
public string MyText {
get { return this.textBox1.Text; }
}
}
class Form2 {
public Form2(Form1 f1){
this.textBox1.Text = f1.MyText;
}
}
>>918 それも程度問題じゃないか?
いちいち言葉の意味から説明しなきゃならないようでは、どこからアドバイス
すればいいのかわからないっしょ。
とりあえず「オブジェクト指向は苦手」ということだから、「プロパティ」や「コンストラクタ」や
「インスタンス」や「参照」の意味から説明していかなきゃいけないんじゃないか?
そういう基本はチュートリアル見るなりなんなりで自分で身に着けてもらわないと
共通言語で話をすることができない。
>>923 >>917 が回答だ。
> 内容に応じて、他スレ・他板へ行くことを勧められる、あるいは誘導される場合がありますがご了承下さい。
925 :
デフォルトの名無しさん :2008/01/09(水) 03:47:14
デザインパターンスレで、Javaのライブラリ(java.io.*)のUMLのクラス図を見て喜んでいる人がいたのですが、 私も、.NET Framework の標準ライブラリの クラス図を見て喜びたいです。 .NET Framework の標準ライブラリのUMLを公開しているサイト、 もしくは、出力できるツールなどありましたら教えてください。
927 :
デフォルトの名無しさん :2008/01/09(水) 07:31:05
>>926 VS の Teamタケエエエエエ orz
VS2005 Pro でもいいんじゃね
やべえMediaElement使ってみたら動画の45度回転があっさりできた 最近のビデオはみんな傾いてるから困ってたんだよなあ
ディスプレイを傾けたほうが早い
> 最近のビデオはみんな傾いてるから困ってたんだよなあ ???
盗撮動画じゃね?
>>921 丁寧にありがとうございます
ところでpublic Form2(Form1 f1){
のForm1 f1はnewとかで実体化しなくていいのでしょうか?
javaやってたのですが、その辺がC#であいまいです
SaveFileDialogのFileNameに最初に値を入れておけば、ダイアログ表示時に保存ファイル名のところに[FileName]が 最初から書かれているってことですよね?それが出ないんですけど何が原因でしょうか? visual studio2005で作っています
935 :
817 :2008/01/09(水) 09:40:50
>>876 テストコードまで書いていただきどうもありがとうございました。
ご指摘のとおり、デリゲートの寿命管理していなかった結果、
例外発生していました。
さらに調べた結果、
rb_funcall で例外発生
↓
デバッガ起動
↓
ローカル変数を表示しようとしてToString()呼び出し
↓
ToString() 内で例外発生してプログラムが落ちる。
というながれで、落ちてた原因は、rb_funcall とは関係ありませんでした orz
>>934 ソースはどうなってる?
Form1.Designer.cs とかにFileName 設定してるとこある?
TreeViewの任意のノードを一時的に非表示にしたいのですが、何かスマートな方法はないでしょうか。 今自分が思い付く方法としては、非表示にしたいノードをコレクションから削除し、再表示するときはコレクションに挿入するという方法なのですが。
>>936 ソースで直接FileNameの値を入れたら思ったとおりの動作をしました。
前回まではVisual StudioのUIを通じて値を入れていたらその設定が反映されませんでした。
>>925 UMLに似た機能としてクラスダイアグラムというものがあるけどねぇ(Std以上のエディション)。
標準ライブラリみたいにでかいものになってくると、でかすぎてエラーが発生し、
表示できない可能性大だけどね。
似た機能というか、UMLのクラス図だろ、あれ。
>>938 UIで入れるとDesigners.csに反映されるんだけどな、1から作っても出るようなら
調べてみたほうがいいかもね。
クラスダイアグラムは多分期待されてるものとは全然違うだろ。
943 :
926 :2008/01/09(水) 11:40:58
>>928 VS2005 Proはもう持っていたりする
> Visio for Enterprise Architects
> F MSDN Premium と組み合わせて購入した場合、提供されます。
o.....rz
>>939-940 ウィザードから WindowsApplication 生成して、クラスダイアログを作れたけど、
標準ライブラリのクラスダイアグラムの作り方がわからん(´・ω・`)
>>933 Form1からForm2を開くんだろ?
Form2をインスタンス化するときに
Form2 f2 = new Form2( this );でいいじゃねーか。
ほんとうにjavaやってたのか?
リストビューに対してフォルダをドラッグするとそのフォルダ名とパスを取得できるようにしたいのですが AllowDropをTrueにしても外部からのドラッグ自体受け付けてくれなくて困っています 同じForm内でテキストボックスからテキストボックスへ、とかリストビューからリストビューへ、というのはあるんですが外部からというのが見つからないですorz
すみませんできましたまじごめんなさい
>>945 AllowDropは単にドロップを受け付けるかどうかの設定で、
実際にドロップされたやつに対してなんかやるというのは、
プログラムを組まないとだめ。
DataFormats.FileDrop でググればたくさんサンプル引っかかる。
と思ったらできてなかった
>>947 それでてっきりできたのかと思ったのですがファイルもドラッグできてしまう
フォルダだけにしたいのですがDataFormats下にフォルダっぽいのもないですしもしかして普通にやったら無理なのでしょうか
やるとしても結構いろいろ書かないとならないような感じの
>>949 えんたーの中で識別するんですね、理解しました
何がしかのユーティリティで、設定ファイルのようなものはどういう形態で保持しておくものなんでしょうか? 例えば初期設定のような感じで、項目を選択していき本使用となるものだった場合 その選択した項目の情報はどのように保存するのかということです 普通にファイルとして出力してしまうと、テキストエディタなどから開けば普通に見れるしいじれてしまいますが そんな感じで良いのでしょうか?
>>951 XmlSerializerとか使うと楽。
いじられるのがいやならBinaryFormatterとか。
編集したら呪う.ini
触っちゃダメ♪.config
>>951 昔はレジストリやiniファイルが主流だったけどね、いまはXMLで保存しておくのがベスト
設定.exe
>>912 できる。
mysql のODBCドライバ拾って来い
PostgreSQLは使えないんですか
959 :
957 :2008/01/09(水) 23:01:18
答えるのもめんどい かくじ c# PostgreSQL でぐぐるように。
「アクティブな子フォームの内容を「名前をつけて保存」で保存する」について質問です。 saveFileDialogでファイル保存することが出来るというのは知っているのですが、 「実際にファイルに保存させるには(保存させる内容によって)独自のコードを 追加する必要がある」そうで、その方法がサッパリ分からなくて困っています。 ラジオボタンやチェックボックス、(グラフによる)パラメータなどの 変更内容を保存するには、どのようなコードを書けば良いのでしょうか。 (例えば、CheckBox1にクリックした、RadioButton3にクリックした、 といった変更をファイルに保存させるためのコードのことです) あと、子フォームが開いてないときに保存しようとした場合の例外処理と、 (複数開いてるときに)アクティブな子フォームがどれなのかを調べて、 そのフォームの内容だけを保存させるためのコードも一緒にご教示いただけると非常に助かります。 よろしくお願いします。
>saveFileDialogでファイル保存することが出来るというのは知っているのですが、 SaveFileDialog はファイル名を選択するだけだよ。 そいつでファイルは保存することができない。
>>960 ちょっと上にやりたい事の答えがある気がするよ
ん?フォームインスタンスをシリアライズしてファイルに保存とかできるんだっけ?
>>961 あ、そういえばOpenFile…でしたっけ?
>>962 もしかして
>>951 に書いてある、「設定ファイル」ですか?
私の場合、逆にファイルとして保存させたいのですが…
すみません、さっき初めてきたので前後の状況が把握できずにいますorz
>>963 つ XML Binding
>>964 ごめん、言ってる事がよくわからない。
Form→設定ファイル出力
設定ファイル読み込み→Form反映
これでも求めてる物と違うの?
マップエディタを作っています パネルの上に描写したいのですが、画面がチラついてしまいます。 パネルのプロパティにDoubleBufferedがなく、 どうしたらチラつかないようにできるのか分かりません。 ご教示お願いします。
>>965 多分、私が把握しきれてないorz
>Form→設定ファイル出力
>設定ファイル読み込み→Form反映
それでフォームの内容が保存できるのでしたら。
>>967 とりあえず
ボタンAクリックで、Form上のなんらかのデータをtxtファイルに書き出し
ボタンBクリックで、txtファイル読み込んで再表示
を勉強がてら書いてみな
>>965 設定ファイルってのが変数等ではなく
フォームの状態事態って言いたいんだろうと思う
>>964 が保存読み込みしたいのははini等の「設定ファイル」ではなく
>>963 の言うシリアライズされた値なんじゃない?
「設定ファイル」にそれを書き込めばいいって話ではあるけど
>>970 まったくその通りで。
一応、本に書いてあることやプロパティで出来そうなことなら
自力でやるつもりでしたが、
>>960 に書いてあるように、
内容を保存させるためのコードが分からないんです。
「テキストボックスに書いた文字列」を保存させたいのではありません。
>>971 >内容を保存させるためのコードが分からないんです。
>「テキストボックスに書いた文字列」を保存させたいのではありません。
俺には違いがわからんなぁ・・・
>>972 テキストボックスの文字列をtxtファイルとして保存させるコード、
イメージをjpegなどのイメージファイルとして保存させるコードは本とかに
書いてあるので何とか自力で出来るのですが、
たとえばチェックボックスをクリックして、それを保存し、次回開いたときに
その状態が保たれている、ということがしたいわけですが、
その、「保存させるための方法」が分からないというわけです。
何度もすみません。
あと、iniファイルじゃなくて、txtとかmp3とかのように独自の拡張子で保存したいので、
「設定ファイル」とは違うような気がします。
>>973 チェックボックスの値を保存するなら
・保存ダイアログでファイル名指定
・ファイル開く
・チェックボックスの状態取得
・ファイルに書き込み
〜他に書くべきものがあれば全部書く
・ファイル閉じる
読み込みはその逆
>>974 ありがとうございます。
ど素人にお付き合いいただき、恐縮です。
またくだらないような質問をしてしまうかもしれませんが、
そのときはよろしくお願いします。
では。
>>958 PostgreSQL なら Npgsql が使いやすい。後は調べてくんろ
チェックボックスとかなら プロパティ→ApplicationSetting→PropertyBinding のほうが簡単かも。 保存のコード1行書くだけでOKだし。
保存ファイル選ぶんだぜ?
Windowsの休止状態みたいに アプリの状態を全部そのまま保存する機能がほしいものだな
休止でいいじゃん 嘘ですすんません。
>>887 Tnx
恐ろしいほど簡単に出来た。10分ぐらい?先人に感謝。
>>966 自分でBitmapに描画してダブルバッファやれば
static string main() って出来ますか? 代わりの方法でもいいので教えてください
なんでstringを返したいの? それがわからないと代わりの方法なんて教えられるわけがない
コンソールに文字出すだけじゃダメなのか?
C#で作ったDllってVBから使えるのかな?
.NETじゃないVB6とかです
regasmで使える。もちろんCOMに縛られるけどな。
>>988 ありがとうございます。
もうひとついいですか?
DLL(クラスライブラリ)でメッセージボックスって出せないんですか?
>>989 できるよ
できないことは起動プログラムとして動作することくらい
むしろCOMに縛られる分VB6からは扱いやすいよな
逆P/Invoke
993 :
デフォルトの名無しさん :2008/01/11(金) 12:03:41
教えてください。 VS2005 C#でプログラムしていますが、HOMEPATHを取得することはできますか? もしできるならやり方をご教授いただけないでしょうか。 お願いします。
Environment.GetEnvironmentVariable( "HOMEPATH" );
.NET Framework 3.5クラスライブラリには、 Enumerableクラスに定義されているもの以外の拡張メソッドはありますか?
ファイルの読み込みについて質問です while (sr.Peek() > -1) { if (sr.ReadLine() == null)//空行ならwhileを抜ける break; if (sr.ReadLine() == "list2")//list2という文字列を見つける { if (sr.Peek() > -1)//list2という文字列があった次の行へ行く { listBox2.Items.Add(sr.ReadLine()); break; } } else listBox1.Items.Add(sr.ReadLine()); } ファイルがsrに読み込まれています。 ここから1行ずつlistBox1に追加していき、list2という文字列を見つけたら次の行をlistBox2についかしwhileを抜ける という動作をしたいのですがソースの下から2行目のlistBox1に追加する段階でnullを入れようとしているらしくそのようにエラーがでます Peekメソッドの使い方等に何か問題があるのでしょうか? どうにも検討がつかなく困っています
997 :
996 :2008/01/11(金) 15:34:40
書き忘れていたことがあります、ごめんなさい ファイルの方はしっかりエディタで開きチェックをしていますが空行はありません また、スペースだけの行というのもありませんでした
>>996 よく見てないが
> if (sr.ReadLine() == null)//空行ならwhileを抜ける
空行なら == "" じゃね?
if (sr.ReadLine() == "list2") //...1 { ... } else listBox1.Items.Add(sr.ReadLine()); //...2 1で読んじゃって"list2"じゃない場合その行は破棄されてるよ んでそこが終行だったら2でnullが返るでしょう
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。