2016-12-06 100 views
1

我有2種形式:主窗體和僅包含用戶可以進行選擇的列表視圖的第二種形式。通過雙擊激活列表視圖項目後,我需要在主窗體上顯示標籤以顯示已激活的項目的文本。這是我的代碼(不工作);爲什麼這是錯的?由於通過ListView更改標籤文本ItemActivate

主要形式:

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

    /* for populating the process list when the user clicks display process button */ 
    private void DisplayProcessButton_Click(object sender, EventArgs e) 
    { 
     Process_List plopen = new Process_List(); 
     plopen.Show(); 

     Process[] process = Process.GetProcesses(); 
     foreach (Process prs in process) 
     { 
      plopen.listView1.Items.Add(prs.ProcessName); 
     } 
    } 

第二形態:

private void listView1_ItemActivate(object sender, EventArgs e) 
{ 
    MainForm mf = new MainForm(); 
    mf.label1.Text = e.ToString(); 
    Close(); 
} 
+0

您是否注意到您創建了* new * MainForm?這不是你現在在屏幕上的那個。 – LarsTech

+0

我如何參考我的主窗體?當我嘗試時,我無法。請參閱我的新編輯 –

+0

可能在您的主窗體偵聽的第二個窗體上創建事件,並在您擁有的lisView1_ItemActivate方法中引發自定義事件並傳遞值。 – LarsTech

回答

0

這裏是你應該做的!關於你的第二形式,做到這一點

public MainForm parentForm; 
public void SecondForm(MainForm form) 
{ 
    InitializeComponent(); 
    parentForm = form; 
} 

而且......

private void listView1_ItemActivate(object sender, EventArgs e) 
{ 
    parentForm.label1.Text = e.ToString(); 
} 
在主窗體

則...

public SecondForm secondform; 
public void MainForm() 
{ 
    InitializeComponent(); 
    secondform = new SecondForm(this); 
} 

而當你打開你的SecondForm使用,無論你想!

secondform.Show(); 

通過這樣做,您可以傳遞信息形式來形式來回。我隨時隨地用我的每一個表格。這非常有用!如果您有任何問題,請告訴我!

+0

這工作!我不是100%確定這是爲什麼會起作用,因爲我來自Python和Java,但是我覺得我已經開始掌握它了。 C-land是一個瘋狂的地方。感謝Landon!你是真正的MVP。 –

+0

沒問題!這只是我通常的做事方式!而且我認爲我會把它傳遞給更多像你一樣有問題的人!除非有特定的原因,否則我絕不會創建一個沒有這樣做的表單! –