我在完成表单上有一个按钮,按下该按钮会打开一个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"
});
}
希望你能提供帮助。
谢谢 - 克雷格。
答案 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;