2017-12-04 5 views
1

使用:C#のフォームVS20152番目のフォームが閉じられた後、onFocusボタンに使用する適切なイベントは何ですか?

を私は何をしようとしている:

  1. Form1上に、私はテキストボックス(tbJobTitle)とボタン持っている - のために(bChooseJobTitle> Form2)を従業員の「役職」。
  2. テキストボックス(有効= false)は、従業員の選択した役職を表示します。
  3. ボタン bChooseJobTitleは、私が最初にグローバル文字列MyVar.Employee_Choose_idJobTitleを設定データグリッド2ボタン(&キャンセル選択してください)

    using System.Threading; 
    ... 
    Thread the1; 
    ... 
    private void bChooseJobTitle_Click(object sender, EventArgs e) 
    { 
        the1 = new Thread(OpenNew_tblJobTitle); 
        the1.SetApartmentState(ApartmentState.STA); 
        the1.Start(); 
    } 
    private void OpenNew_tblJobTitle(object obj) 
    { 
        Application.Run(new form2()); 
    } 
    ... 
    
  4. を持つ別のフォーム(Form2)(デフォルトを開きますユーザーがコンテンツを選択して[選択]ボタンをクリックすると、選択したインデックスの主キーが格納されます。キャンセルボタンがクリックされると、MyVar.Employee_Choose_idJobTitleは= ""のままです。

    //... at form2 "Choose" button 
    private void bChoose_Click(object sender, EventArgs e) 
    { 
        MyVar.idJobTitle = dataGridView1.CurrentRow.Cells[0].Value.ToString(); 
        this.Close(); 
    } 
    
    private void bCancel_Click(object sender, EventArgs e) 
    { 
        this.Close(); 
    } 
    
  5. Form2のはどちらかによって閉じられているときにボタンを「選択」または「キャンセル」ボタンを押すと、フォーカスはForm1のbChooseJobTitle ボタンに戻ります。

どのようにこのイベントをトリガーしますか?

... MyVar.idJobTitleの内容がnullではないかどうかをテストし、適切な値をテキストボックスに追加できます。

ボタンイベントをonFocusやactivateのように探していましたが、何も見つかりませんでした。代わりにフォームイベントを使用しますか?

答えて

1

あなたが好きな場合は、単純に、イベントフォームを使用してください。

private void form1_Activated(object sender, EventArgs e) 
    { 
     if (MyVar.idJobTitle != "") 
     { 
      tbJobTitle.Text = Choose_idJobTitle; 
      MyVar.idJobTitle = ""; 
     } 
    } 
0

これはWindowsフォームの場合、いくつか指摘したいことがあります。

  1. 新しいフォームを開始するためだけに新しいスレッドを作成する必要はありません。スレッド数が増えてもアプリケーションの高速化は意味しません。
  2. 新しいフォームを起動するのに、Application.Runを使用する必要はありません。
  3. 子フォームから親フォームに値を返すことができます。

Form2の

public partial class Form2 : Form 
{ 
    public string JobTitle { get; private set; } 

    public Form2() 
    { 
     InitializeComponent(); 
    } 

    private void Form2_Load(object sender, EventArgs e) 
    { 

    } 

    private void bChoose_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = DialogResult.OK; 
     this.JobTitle = dataGridView1.CurrentRow.Cells[0].Value.ToString(); 
     this.Close(); 
    } 

    private void bCancel_Click(object sender, EventArgs e) 
    { 
     this.DialogResult = DialogResult.Cancel; 
     this.JobTitle = string.Empty; 
     this.Close(); 
    } 
} 

メインフォーム

public partial class frmTest : Form 
{ 
    public frmTest() 
    { 
     InitializeComponent(); 
    } 

    private void bChooseJobTitle_Click(object sender, EventArgs e) 
    { 
     Form2 frm2 = new Form2(); 
     DialogResult dr = frm2.ShowDialog(); 

     if(dr == DialogResult.OK) 
     { 
      // Do something about the chosen Job Title 
      tbJobTitle.Text = frm2.JobTitle; 
     } 
     else 
     { 
      // Cancel button was pressed 
     } 
    } 
} 

シンプルShowDialogコールは新しいフォームを開くことができ、それが親フォームがない限りに焦点を当てたことができません子フォームが閉じられています。

関連する問題