
VisualC# .net です。
フォームを表示する場合に
コンストラクタが呼ばれその後ロードイベントで
フォームのコントロールの初期設定を行っています。
(この方法がまちがっている?)
ロードイベント内でコンボボックスの初期設定を行うと
コンボボックスのイベントが発生してしまいます。
以下参照にて
このイベントでメッセージを表示しているのですが
初期設定では出てほしくありません。
そこで、
これを防ぐためには以下のようにフラグを立てるような
方法しかないのでしょうか?
それともDebugger.IsAttached のようなものが
用意されているのでしょうか
public bool iload = false; (←仮フラグを追加)
private void Form1_Load(object sender, EventArgs e)
{
iload = true; (←仮フラグを登録)
ComboBox1.SeletedIndex = 0;
iload = false; (←仮フラグを削除)
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
if (iload) return; (←仮フラグ登録時はなにもしない)
MessageBox.Show("変更しました");
}
No.2ベストアンサー
- 回答日時:
SelectedItemChanged()で他にも処理をするようですし、フラグでいいんではないでしょうか。
Loadが終わったかどうかを判断するプロパティは無いと思います。
どうしてもプロパティやメソッドとして制御したいようなら、フォームにスーパークラスを作るとか、
アクセサにすればいいのでは。
個人的にはフラグはあまり使いたくありませんが。
ありがとうございます。
やはり存在しないみたいですね
とりあえず私も調べてそれらしいのをみつけました。
DesignModeっていうのがあるみたいですけど使えないみたいですね。
私もフラグは好きじゃないので質問をさせてもらったのですけど
とりあえず今回はフラグを使用して対応しておきます。
スーパークラスは作れないです。作り方わからないです。
たぶん、サブクラス作って、内部でフラグを使用するぐらいしか思いつかないです。
No.1
- 回答日時:
Load中は、イベントを削除すればいいでしょう。
private void Form1_Load(object sender, EventArgs e)
{
// イベントハンドラの削除
comboBox1.SelectedIndexChanged -= comboBox1_SelectedIndexChanged;
// 色々な処理
// イベントハンドラの追加
comboBox1.SelectedIndexChanged += comboBox1_SelectedIndexChanged;
}
もしくは、デザイナ上でイベントハンドラを紐づけておかず(プログラムのみ記述しておく)、
イベントが完了後にイベントハンドラを追加すればいいです。
コンストラクタで当然InitializeComponent()が呼ばれるわけですが、
その中でイベントハンドラが設定されるのが問題でしょう。
どうしてもイベントハンドラ周りの制御をいじりたくないというのならば、
質問に記されているような制御を行うことになるでしょう。
また、どのような制御を行っているのかわかりませんが、初期化時にイベントが走行しても
なんら影響のでないコードになっていれば、問題ないと思います。
逆に言うと、初期化によって選択されている値が変更されたにも関わらず、そのタイミング
で処理すべき処理が行われないとすると、そちらの方が影響を及ぼしたりはしないでしょうか?
この回答への補足
<<元々>>
private void Form1_Load(object sender, EventArgs e)
{
ComboBox1.SeletedIndex = 0;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
MessageBox.Show("変更しました");
}
処理的には問題なく動作します。
ただ、同じ処理が数か所存在しているので
起動前にメッセージ文をユーザーがクリックして
何度もメッセージ消去するのはおかしいですよね。
ロード後にイベントを定義するという方法ですが、
これだと初期設定(ロード)時の処理が反映されなくなるのではないでしょうか?
<<変更後:現実>>
public bool iload = false;
private void Form1_Load(object sender, EventArgs e)
{
iload = true;
ComboBox1.SeletedIndex = 0;
iload = false;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
if(iload == false) MessageBox.Show("変更しました");
}
<<変更後:理想(Debugger.IsAttachedのようなEvent.Executeがあれば>>
private void Form1_Load(object sender, EventArgs e)
{
ComboBox1.SeletedIndex = 0;
}
private void ComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
Function(ComboBox1.Text);
if(!Event.Execute) MessageBox.Show("変更しました");
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- C言語・C++・C# 大量のデータを読み込んで表示する速度を改善したい 8 2023/05/07 13:29
- C言語・C++・C# Windows Formアプリからコンソールを呼び出して文字を出力させたい 8 2023/05/09 10:53
- C言語・C++・C# C# DatagridviewにExcelシートを反映するとエラーが出る 2 2023/05/06 17:12
- その他(プログラミング・Web制作) google formsを使ったタスク依頼フォーム作成におけるご相談 1 2023/06/22 15:55
- Visual Basic(VBA) 九九の答えの計算 3 2022/12/20 22:13
- Visual Basic(VBA) EXCEL VBAにて動的にCheckBOXを複数作成し、同BOXにイベントを追加したい 1 2023/03/16 07:05
- Visual Basic(VBA) ①ExcelVBAでカレンダーを作り、別のユザーフォームで日付を入力したいのですがエラーになります。 1 2023/02/17 18:39
- Visual Basic(VBA) Visual Basic : ImageListの画像がそろったときにメッセージを表示 1 2023/07/20 13:53
このQ&Aを見た人はこんなQ&Aも見ています
-
性格悪い人が優勝
できるだけ性格悪い人になって回答をお願いします。
-
許せない心理テスト
皆さんがこれまで受けた中で許せない心理テストがあれば教えていただきたいです。
-
性格いい人が優勝
できるだけ性格いい人になって回答をお願いします。
-
はじめての旅行はどこに行きましたか?
記憶の中で1番昔の旅行先とエピソードを教えてください。
-
人生で一番お金がなかったとき
人生で一番お金がなかったときって、どんなときでしたか?
-
CloseとDisposeの違い
Visual Basic(VBA)
-
FORMが開いているかどうかの確認方法
Visual Basic(VBA)
-
VB.NETでのイベントの途中終了
Visual Basic(VBA)
-
-
4
DataGridView 列ごとの入力制限
Visual Basic(VBA)
-
5
Form_Load と Form_Activate のタイミング
Visual Basic(VBA)
-
6
フルパスから最後のディレクトリ名を取得したい。
Visual Basic(VBA)
-
7
【DB】同じトランザクション内でupdateとselectをしたときの結果値
その他(データベース)
-
8
VB.NETでボタンのクリックイベントハンドラが2回実行される
Visual Basic(VBA)
-
9
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
10
矢印(左右)キーでイベントを発生させたい。
Visual Basic(VBA)
-
11
DataGridViewのチェックボックスのON、OFFの判定方法
C言語・C++・C#
-
12
C#でボタンクリックをキャンセル
C言語・C++・C#
-
13
C# dataGridViewの値だけクリア
C言語・C++・C#
-
14
SQLで列名を変数にできないでしょうか
SQL Server
-
15
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
16
VBの画面サイズについて
Visual Basic(VBA)
-
17
VB.NETで他のプロジェクトで作成したフォームを使う方法
Visual Basic(VBA)
-
18
Hideについて(.NET)
Visual Basic(VBA)
-
19
DataGridViewでセルクリックイベントを発生させるには
Visual Basic(VBA)
-
20
C#でフォームのオブジェクト名を変数名で指定
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・昔のあなたへのアドバイス
- ・字面がカッコいい英単語
- ・許せない心理テスト
- ・歩いた自慢大会
- ・「I love you」 をかっこよく翻訳してみてください
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・はじめての旅行はどこに行きましたか?
- ・準・究極の選択
- ・この人頭いいなと思ったエピソード
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・【お題】甲子園での思い出の残し方
- ・【お題】動物のキャッチフレーズ
- ・人生で一番思い出に残ってる靴
- ・これ何て呼びますか Part2
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・あなたが好きな本屋さんを教えてください
- ・かっこよく答えてください!!
- ・一回も披露したことのない豆知識
- ・ショボ短歌会
- ・いちばん失敗した人決定戦
- ・性格悪い人が優勝
- ・最速怪談選手権
- ・限定しりとり
- ・性格いい人が優勝
- ・これ何て呼びますか
- ・チョコミントアイス
- ・単二電池
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・泣きながら食べたご飯の思い出
- ・一番好きなみそ汁の具材は?
- ・人生で一番お金がなかったとき
- ・カラオケの鉄板ソング
- ・自分用のお土産
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
【Excel】特定の文字を含むセル...
-
UMLでの例外処理
-
switch の範囲指定
-
月度は何て読みますか?
-
メルカリのメルカードで買い物...
-
EXCEL VBA マクロ 実行する度に...
-
リョウ・・・量?料?
-
Loadイベント中にほかのイベン...
-
VBAでループ内で使う変数名を可...
-
インタラクティブの反対語は?
-
DoEventsがやはり分からない
-
エクセルVBA マクロ処理中のポ...
-
Do~Loopした回数をカウントしたい
-
マルチスレッド絡み?マルチな...
-
取り消し線が入った文字を削除...
-
プログラミング言語についてc++...
-
findは動くがfindnextがマクロ...
-
VB.NET プロシージャ内で 条件...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「ご処理進めて頂きますようお...
-
エクセルで、日付を入力すると...
-
VBAでループ内で使う変数名を可...
-
【Excel】特定の文字を含むセル...
-
DoEventsがやはり分からない
-
UMLでの例外処理
-
EXCEL VBA マクロ 実行する度に...
-
switch の範囲指定
-
VBの質問#if 0 then ってどう...
-
月度は何て読みますか?
-
お家デートをしててハグを長い...
-
セックスレスの既婚女性は自慰...
-
インタラクティブの反対語は?
-
Loadイベント中にほかのイベン...
-
Do~Loopした回数をカウントしたい
-
findは動くがfindnextがマクロ...
-
VBAでセルに値が入力されるまで...
-
FFTの結果ついて
-
リョウ・・・量?料?
-
取り消し線が入った文字を削除...
おすすめ情報