- PR -

C#の動作について

投稿者投稿内容
lalupin4
大ベテラン
会議室デビュー日: 2004/07/26
投稿数: 163
投稿日時: 2005-12-22 16:55
(あ゛っ、出遅れた)

 と、いうことで次に調べてみるのはコード内に
コード:
// [オブジェクト]の[イベント]が発生したら処理を[メソッド]に[デリゲート]する
オブジェクト.イベント += new デリゲート(メソッド);


という構文のコードがあるか(あるいはないか)、あればそれはどこか。ですね。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-12-23 06:49
引用:

梅干あきらさんの書き込み (2005-12-22 16:18) より:
Jitta様

回答ありがとうございます。
デザインウィドウ上のFromの中の、ボタンとか、テキストボックス、等に対応する個0−ディングをする場所には、どうやってたどり着くのが正しい方法なのでしょうか?札ぶるクリックは正しい方法ではない、とのことですが、



("様"は嫌だなぁ)
だから、落ち着きましょう。。。せめて、入力ミス、変換ミスがないかぐらいは、見直しましょう。(で、30分以内なら削除できます)


 対応する…これ、解釈が難しいですね。私は「デフォルトイベントのハンドラ」と書きましたよね。ボタンであれば Click、テキストボックスであれば TextChanged が、デフォルトイベントです。ですから、フォームデザイナで、そのコントロールをダブルクリックしたときには、ボタンであれば button1_Click メソッドができて、そこに移動します。
 このとき、同時に InitializeComponent メソッド内に、button1.Click += new ClickEventHandler(button1_Click); という行ができています。この行が、デザイナ上(プロパティウインドウ)で、イベントとメソッドを結びつけています。

 ここで問題になるのは、この行を、どこに書いたか、ということです。この行が InitializeComponent にあれば、デザイナ上でコントロールをダブルクリックすれば、このハンドラメソッドに移動します。しかし、InitializeComponent になければ、新しく作られます。

 たとえば、「フォーム上にコントロールがたくさんあるから、制御ファイルにコントロールの種類、名前、対応するイベントハンドラを定義しよう」みたいなことをしていると、デザイナからコードへの移動はできません。
 たとえば、「プログラムを初期化する処理を云々」と書いてある下に、自分で button1.Click += ... と書いたなら、これもデザイナからコードへの移動はできません。


 再三繰り返しになりますが、今回は comboBox でしたっけ?それのイベントハンドラを定義する行が、どこにあるのかを確認してください。
 または、その行が消えてしまうのかどうかを、確認してください。


 それと、あなたが確認した、再現した手順を書いてください。
 これは、新規にプロジェクトを作成したものが好ましいですが、今あるプロジェクトで確認したのなら、comboBox1.SelectionChanged += ... の行がどこにあるのかを確認してください。
 また、フォームデザイナを表示して、プロパティウインドウで稲妻ボタンを押し、SelectionChanged イベントにハンドラが割当たっているかどうかも確認してください。
梅干あきら
会議室デビュー日: 2005/12/01
投稿数: 16
投稿日時: 2005-12-25 07:58
Jitttaさん

いつも「何々様」とメールでは書いておりまして、申し訳ありません。

問題のプログラムのForm1.csファイルの中の、”#region Windows フォームデザイナで生成されたコード”というところを、開き、ComboBox25 というのを探してみると、以下のような行がみつかりました。
this.comboBox25.SelectedIndexChanged +=new System.EventHandler(this.comboBox25_SelectedIndexChanged);
は、//comboBox25の下にありましたが、
//comboBox11の下に
this.comboBox11.SelectedIndexChanged +=new System.EventHandler(this.comboBox25_SelectedIndexChanged);
というのがありました。ここには一群のcomboBox11を定義する、Location, Name, Size 等があります。
+=の左右で、comboBox**の**部分の内容が違うことが、原因でしょうか?

よろしくお願いします。

_________________
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2005-12-25 08:44
梅干あきらさん

その状態になるまでにした手順は何ですか??

1.comboBox25をダブルクリックしてcomboBox25_SelectedIndexChangedを生成
2.comboBox11のSelectedIndexChangedに1で生成されたメソッドを関連付ける
ということをしているのなら,梅干あきらさんと同じ状態になります。
狙ってやってるなら別におかしな状態ではないです。
梅干あきら
会議室デビュー日: 2005/12/01
投稿数: 16
投稿日時: 2005-12-26 14:20
kazuki様

回答ありがとうございます。梅干です。前回報告したcomboBox11, comboBox25がクロスしている件ですが、コード作成者に質問したところ、意図していないとのことです。自動的に作成される部分でこのようなことが起きるのは、変だと思いますが・・・・・。コード作成者は、自動的に変わっているのだ・・・・と申します。このようなことは、C#では結構起きることなのですか?」

_________________
梅干あきら
会議室デビュー日: 2005/12/01
投稿数: 16
投稿日時: 2005-12-26 14:20
kazuki様

回答ありがとうございます。梅干です。前回報告したcomboBox11, comboBox25がクロスしている件ですが、コード作成者に質問したところ、意図していないとのことです。自動的に作成される部分でこのようなことが起きるのは、変だと思いますが・・・・・。コード作成者は、自動的に変わっているのだ・・・・と申します。このようなことは、C#では結構起きることなのですか?」

_________________
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-12-26 15:00
引用:

梅干あきらさんの書き込み (2005-12-26 14:20) より:

コード作成者は、自動的に変わっているのだ・・・・と申します。
このようなことは、C#では結構起きることなのですか?」


いや、流石に起きた試しがありません。
C# に関しては Handles 句がないため、余計に起こりえません。

埒があきませんね。
InitializeComponent 前後がごちゃごちゃしてそうです。
技術的なコトは担当の方がやってくれないと何とも...

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
梅干あきら
会議室デビュー日: 2005/12/01
投稿数: 16
投稿日時: 2005-12-27 10:42
Jittaさん

これは駄目ですよ。コントロールをダブルクリック…これ、本当は「デフォルトイベント」のハンドラへ飛ぶので、あまりよくありませんが…

とのことですが、いろいろ本を見る限り、コントロールを配置したあとのダブルクリックでエベントハンドラーを生成しますが、そのあとの動作は、プロパティの稲妻マークの中のクリックを押さないと駄目なのだ、というような記述は、見たことがありません。「あまり良くない」というところを、教えて下さい。
_________________

スキルアップ/キャリアアップ(JOB@IT)