2009-03-02 3 views
1

私は顧客データベース内の検索機能を処理する動作するWinFormを持っています。これは、次のコントロールが含まれていますアクティブなコントロールに応じてAcceptButtonを変更する

  • あなたが検索文字列を入力してtextBox(A)
  • "検索" ボタン(B)検索
  • の結果を返します
  • AのDataGridView(C)
  • "OK" ボタン(D)と、私は次のaccieveしようとしていますどのような "キャンセル" ボタン(E)

はこれです:

  1. AがアクティブであるAcceptButton Bまたは入力が押下されると
  2. CがアクティブになるべきであるBに連結されるべきである(ENTER)
  3. Cがアクティブである場合AcceptButtonはD
  4. に連結されなければならない

Iあなたが答えを知っていれば、これはやや大きな質問ですので、弾丸の一つに答えることを躊躇しないでください。

編集:上記の要件1と3の実装を解決しましたが、まだ2番目の要件への回答を探しています。わかりやすくするために、検索が開始されたとき(つまり、キーボードのEnterキーまたはマウスの検索ボタンを押したことを意味する)、DataGridViewの最初の行にフォーカスを移動したい。

答えて

3

:入力を試して到達した場合ここでは、文字列の長さなどを確認してください。

そして、検索を実行してDataGridViewに入力すると、AcceptButtonを「OK」に設定できます。

private void dataGridView1_DataMemberChanged(object sender, EventArgs e) 
    { 
     this.AcceptButton = OKButton; 
    } 

このイベントは使用しない方がいいかもしれませんが、

「キャンセル」は常にCancelButtonです。

EDIT:OKパート2のために次のコードをしたい:

private void SearchButton_Click(object sender, EventArgs e) 
    { 
     dataGridView1.Focus(); 
    } 

検索ボタンを押している。これは、すぐにそれがアクティブになりますが、DataGridViewのは、移植されたとき、あなたはおそらくそれをやりたいです - 検索結果が返されなかった場合に備えて。

+1

これは、第2部の別のdataGridView_DataMemberChangedを意味すると思いますか? – Sakkle

+0

@Sakkle:いいえ - dataGridView1.Focus()を同じイベントハンドラに入れることができます。 – ChrisF

+0

Yepp ...私はそれを考え出した:) Thanks – Sakkle

1

ハンドラーをセットアップして、特定のコントロールのControl.Enterイベントを追跡します。

private void textBox1_TextChanged(object sender, EventArgs e) 
    { 
     this.AcceptButton = SearchButton; 
    } 

は、おそらくより多くのコードがあるようになるでしょう:テキストボックス(TextBox)コントロールは、「検索」するAcceptButtonを設定するためのテキストがイベントを変更し得るとき

this.AcceptButton = ControlThatShouldBeAcceptButton; 
1
private void WhateverControl_Enter(...) 
{ 
    this.AcceptButton = myButton; 
} 
1

DataGridViewBindingCompleteEventHandlerにイベントリスナーを実装する必要があります。この場合、次のコードを追加することができます:

{ 
    if(grid.Rows.Count > 0) 
    { 
     grid.ClearSelection(); 
     grid.Rows[0].Selected = true; 
    } 
    grid.Focus(); 
} 
関連する問題