2017-03-21 7 views
-1

:Form1のフォーム1の新しいフォームからボタンクリックイベントを受け渡す/検出するにはどうすればよいですか?新しいフォームで

private void btnAddNewDownload_Click(object sender, EventArgs e) 
     { 
      AddNewDownloads addnew = new AddNewDownloads(); 
      addnew.Show(); 
     } 

private void btnOK_Click(object sender, EventArgs e) 
     { 
Properties.Settings.Default.AddNewDownloadsUrl = TextBoxURL.Text; 
Properties.Settings.Default.AddNewDownloadsFilename = TextBoxFilename.Text; 
Properties.Settings.Default.AddNewDownloadsSaveto = TextBoxBrowse.Text; 
Properties.Settings.Default.Save(); 
     } 

は今、私はForm1の中のすべてのProperties.Settings.Defaultを取得するために、新たな形でのbtnOKボタンをクリックしたときにすることを望みます。私は何とかbtnOKのクリックイベントをform1でも作成する必要がありますか?私は、btnOKをクリックした後で、この設定を取得するためにform1に設定を保存した後にのみ、それを必要とします。問題は、私は、フォームのプロパティを選択し、btnOKAcceptButtonにプロパティを割り当てるAddNewDownloadsフォームでbtnOK

答えて

1

btnOKAddNewDownloadsフォームをクリックしたときのForm1にイベントを発生させたコードです。したがって、btnOKがクリックされたときにForm1が認識されるため、問題は解決されます。私はメモ帳を使ってコードを書いていますので、以下のコードを試してみてください。 Visual Studioでコードを再訪します。

//--------------Form1 code 

//declaring addnew object as class level or Method level depends on your design 
//I prefer declaring class level as we can access addnew object properties 
//from anywhere in Form1 
AddNewDownloads addnew; 

private void btnAddNewDownload_Click(object sender, EventArgs e) 
{ 
    if (addnew == null) 
    { 
     addnew = new AddNewDownloads(); 
     addnew.BtnOkClicked += addnew_BtnOkClicked; 
    } 

    addnew.Show(); 
} 

private void addnew_BtnOkClicked(object sender, EventArgs e) 
{ 
    //place your code here to 
    MessageBox.Show("Event raised by Ok button in AddNewDownloads"); 

} 



//----------------------AddNewDownloads code 
//declare a class level event 
public event EventHandler BtnOkClicked; 

private void btnOK_Click(object sender, EventArgs e) 
{ 
    //This will fire an event to be caught by subscriber 
    //which is Form1.. put a break point in 
    OnGotClosed(EventArgs.Empty); 

    //I am not sure where yo want to put Properties.Settings 
    //So removed it from here... but you can decide and put 
    //as per your design 
} 

protected virtual void OnBtnOkClicked(EventArgs e) 
{ 
    EventHandler handler = BtnOkClicked; 
    if (handler != null) 
    { 
     handler(this, e); 
    } 
} 
0
  1. をクリックしたとき、私はForm1のに知らないです。ボタンをクリックするとフォームのDialogResultDialogResult.OKが割り当てられます。
  2. Show()の代わりにaddnew.ShowDialog()を使用してください。
  3. ShowDialog()呼び出しの戻り値を確認します。 Form1の

コード:以下

private void btnAddNewDownload_Click(object sender, EventArgs e) 
{ 
    using(var addnew = new AddNewDownloads()) 
    { 
     if (addnew.ShowDialog() != DialogResult.OK) 
      return; 

     // get settings here 
    } 
} 
+0

私はすべての変更を行なったし、私はそれを使用するようになってきたbtnAddNewDownload_Click新しいフォームを表示するためにクリックしたときに...そして新しいフォームを表示/オープン。しかし、それからOKボタンをクリックすると、btnAddNewDownload_Clickイベントにもう一度は行きません。 –

+0

私がaddNewDownload_Clickイベントを使用している場合は、addnew.btnOK.Click + = BtnOK_Click;私がやっているイベントでは:プライベートvoid BtnOK_Click(オブジェクト送信者、EventArgs e) { listView1.Items.Add(Properties.Settings.Default.AddNewDownloadsUrl); }それは働いています。 –