2016-12-06 99 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

没问题!这只是我通常的做事方式!而且我认为我会把它传递给更多像你一样有问题的人!除非有特定的原因,否则我绝不会创建一个没有这样做的表单! –