c#如果声明包含另一个表单来执行操作

时间:2017-11-18 22:11:48

标签: c# combobox

我在完成表单上有一个按钮,按下该按钮会打开一个Windows资源管理器。

当我只有一个目录时,这没关系。 我现在有2个目录,现在从我的主表单设置。

我想做的是,当按下按钮时,如果主表单上的组合框例如是“Apples”,则会打开编码目录。 如果我主要的组合框是“Pears”,那么打开一个不同的目录。

我有以下代码打开原始目录 - 只是不知道如何包含第二个,因为我似乎无法从完成表单访问组合框:

private void button1_Click(object sender, EventArgs e)
{
    {
        this.Hide();
        FrmMain form3 = new FrmMain();
        form3.Show();
    }

    System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
    {               
        FileName = "C:\\Directory 1\\",
        UseShellExecute = true,
        Verb = "open"
    });
}

希望你能提供帮助。

谢谢 - 克雷格。

2 个答案:

答案 0 :(得分:0)

假设您的mainform类名为MainForm,并且其中的组合框实例称为directoryComboBox

现在,第一步是在MainForm中创建一个属性,公开当前选定的directoryComboBox实例值:

public String CurrentDirectory
{
    get { return directoryComboBox.Text; }
}

CompletionForm课程中,添加以下字段(用作对父MainForm实例的引用):

private MainForm m_Parent;

并按如下方式修改构造函数:

public CompletionForm(MainForm parent)
{
    m_Parent = parent;
}

最后,修改您在其中创建新填写表单的MainForm代码,并按如下方式显示给用户:

CompletionForm cf = new CompletionForm(this); // this is the current instance of `MainForm` showing the completion form
cf.ShowDialog(this);

CompletionForm中,您现在可以访问directoryComboBox当前选定的值:

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
        {               
            FileName = Path.Combine(@"C:\", m_Parent.CurrentDirectory),
            UseShellExecute = true,
            Verb = "open"
        });

您还可以通过直接传递当前CompletionForm值来构建您的directoryComboBox实例。该方法非常相似,并且不需要您修改添加新属性的MainForm类。您所要做的就是编辑代码的正确CompletionForm部分:

private String m_CurrentDirectory;

public CompletionForm(String currentDirectory)
{
    m_CurrentDirectory = currentDirectory;
}

System.Diagnostics.Process.Start(new System.Diagnostics.ProcessStartInfo()
        {               
            FileName = Path.Combine(@"C:\", m_CurrentDirectory),
            UseShellExecute = true,
            Verb = "open"
        });

和实例化它的MainForm方法:

CompletionForm cf = new CompletionForm(directoryComboBox.Text);
cf.ShowDialog(this);

答案 1 :(得分:0)

有很多方法可以做到这一点。我假设您的完成表格是从主表格打开的。最干净的方法是在创建时注入主要形式的组合框的当前选择。以下内容:

 var completionForm = new CompletionForm(directoryCombo.Text);
 completionForm.ShowDialog(this);

请注意ShowDialog是相关的。这可确保在完成表单处于活动状态时,没有人会更改所选目录。如果不是这种情况,并且完成表格不是模态的,那么更好的选择是在主表单中实现公共属性:

public string SelectedDirectory => directoryCombo.Text;

然后只需从填写表单中访问它:

var selectedDirectory = (Owner as mainForm).SelectedDirectory;