簡體   English   中英

如何從另一個類中獲取listBox1_SelectedIndexChanged事件的值?

[英]How to get the value from a listBox1_SelectedIndexChanged event from another class?

我有一個帶有listbox的主窗體,我還有一個listBox1_SelectedIndexChanged事件,並且每個項目更改時會有更多代碼。

有沒有一種簡單的方法可以在另一個類而不是主窗體上創建此事件?

如果沒有,就像我的意思,我不希望所有這些代碼都在我的主窗體的代碼上,所以我想將它移動到另一個更相關的類。

listBox1_SelectedIndexChanged發生時,通知Class B的“最佳實踐”方法是什么? 是代表嗎? 我試圖弄明白,但並不是真的明白。 將非常感謝幫助。

謝謝。

我不確定這兩個類是如何相互鏈接和它們的類型,但使用下面的代碼,你可以得到解決問題的想法

public class A
{
   public delegate void ItemSelectedHandler(string title);
   public event ItemSelectedHandler OnItemSelected;
   public void listBox1_SelectedIndexChanged(object sender, EventArg, e)
   {
       //other code
       if(OnItemSelected!=null)
       {
          OnItemSelected("Something");
       }
   }
   public void LaunchB()
   {
      var b = new B(this);
      b.ShowDialog();
   }
}

public class B
{
   private A _parent;
   public B(A parent)
   {
      _parent = parent;
      _parent.OnItemSelected += onItemSelected;
   }
   public void onItemSelected(string title)
   { 
      //will fire when selected index changed;
   }
}

我想我以更簡單的方式解決了我的問題。

  1. 我將listbox1訪問修飾符設置為Internal
  2. 我為主窗體創建了屬性。
  3. Class B ,我訂閱了listBox1.SelectedIndexChanged事件並創建了一個這樣的事件處理程序:

form1Properties.listBox1.SelectedIndexChanged+=listBox1_SelectedIndexChangedforClassB;

  1. 然后我在Class B類中實現了這樣的事件處理程序:

private void listBox1_SelectedIndexChangedforClassB(object sender, EventArgs e) { MessageBox.Show("listbox1 selected item has changed!"); }

我希望我使用所有正確的條款,如果我錯了請糾正我,如果你發現我的解決方案有任何缺陷,請告訴我。 謝謝。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM