トップ回答者
ComboboxのDataSourceバインド時のイベントについて

質問
回答
-
DataSourceにバインドされるときにフラグ制御をしてくれるようにしたComboBoxを作って手間を省くくらいしか思いつかないですね。
Code Snippetpublic class ComboBoxNotSelectEvent : ComboBox
{
private bool isDataSourceChanging = false;protected override void OnDataSourceChanged(System.EventArgs e )
{
isDataSourceChanging = true;
base.OnDataSourceChanged(e);
isDataSourceChanging = false;
}
protected override void OnDisplayMemberChanged(System.EventArgs e)
{
isDataSourceChanging = true;
base.OnDisplayMemberChanged(e);
isDataSourceChanging = false;
}protected override void OnSelectedIndexChanged(System.EventArgs e)
{
if( ! isDataSourceChanging)
{
base.OnSelectedIndexChanged(e);
}}
protected override void OnSelectedValueChanged(System.EventArgs e)
{
if( ! isDataSourceChanging)
{
base.OnSelectedValueChanged(e);
}
}
}
すべての返信
-
!(^^)!ふ~ さんからの引用 Form1.Designer.csの中を覗きますと、 this.SuspendLayout()を実行し、コントロールの状態を停止してから、設定を変更し、作業後に、this.ResumeLayout(false)を実行し、再開しています。この辺をご利用されては如何でしょうか?
そうなのですか?
SuspendLayout メソッド、ResumeLayout メソッドはレイアウト ロジックを停止するだけなので、
レイアウトに関係のない ComboBox のイベントは影響しないと思っていましたが...こりゃ私の勉強不足ですね。
-
DataSourceにバインドされるときにフラグ制御をしてくれるようにしたComboBoxを作って手間を省くくらいしか思いつかないですね。
Code Snippetpublic class ComboBoxNotSelectEvent : ComboBox
{
private bool isDataSourceChanging = false;protected override void OnDataSourceChanged(System.EventArgs e )
{
isDataSourceChanging = true;
base.OnDataSourceChanged(e);
isDataSourceChanging = false;
}
protected override void OnDisplayMemberChanged(System.EventArgs e)
{
isDataSourceChanging = true;
base.OnDisplayMemberChanged(e);
isDataSourceChanging = false;
}protected override void OnSelectedIndexChanged(System.EventArgs e)
{
if( ! isDataSourceChanging)
{
base.OnSelectedIndexChanged(e);
}}
protected override void OnSelectedValueChanged(System.EventArgs e)
{
if( ! isDataSourceChanging)
{
base.OnSelectedValueChanged(e);
}
}
}