使用Visual Studio 2008
我有一个用户控件。该按钮调用文件夹浏览器对话框。
我试图将路径传递给父表单,它只是没有到达那里。
我需要一点输入....
用户控制:
public partial class FolderSelectDDL : UserControl
{
public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public static event ButtonClickedEventHandler OnUserControlButtonClicked;
private string folderPath;
public string FolderPath
{
get { return folderPath; }
set { folderPath = value; }
}
public FolderSelectDDL()
{
InitializeComponent();
}
private void btnSaveToPath_Click(object sender, EventArgs e)
{
string path;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
path = folderBrowserDialog1.SelectedPath;
if (OnUserControlButtonClicked != null)
OnUserControlButtonClicked(this, e);
folderPath = path;
}
}
}
形式:
public partial class ImportCreateExcel : Form
{
FolderSelectDDL uc = new FolderSelectDDL();
public ImportCreateExcel()
{
FolderSelectDDL.OnUserControlButtonClicked += new FolderSelectDDL.ButtonClickedEventHandler(btnSaveToPath_Click);
InitializeComponent();
}
private void btnSaveToPath_Click(object sender, EventArgs e)
{
MessageBox.Show(uc.FolderPath); //blank
//MessageBox.Show(uc.folderBrowserDialog1.SelectedPath); //blank
}
}
路径始终为空白,无论是来自设置为public的对话框还是变量FolderPath。
随时欢迎任何输入。
谢谢!
答案 0 :(得分:1)
您的表单类中已经有uc
,但您在uc
处理程序中定义了一个新的btnSaveToPath_Click
(局部变量),其当然具有初始FolderPath
} property as empty。
private void btnSaveToPath_Click(object sender, EventArgs e)
{
MessageBox.Show(uc.FolderPath); //NOT blank
MessageBox.Show(uc.folderBrowserDialog1.SelectedPath); //NOT blank
}
UserControl 中没有触发 自定义事件的任何代码:
public partial class FolderSelectDDL : UserControl
{
public delegate void ButtonClickedEventHandler(object sender, EventArgs e);
public static event ButtonClickedEventHandler OnUserControlButtonClicked;
private string folderPath;
public string FolderPath
{
get { return folderPath; }
set { folderPath = value; }
}
public FolderSelectDDL()
{
InitializeComponent();
}
private void btnSaveToPath_Click(object sender, EventArgs e)
{
string path;
if (folderBrowserDialog1.ShowDialog() == DialogResult.OK)
{
path = folderBrowserDialog1.SelectedPath;
if (OnUserControlButtonClicked != null)
OnUserControlButtonClicked(this, e);
folderPath = path;
//Fire event here
if(OnUserControlButtonClicked != null) OnUserControlButtonClicked(this, EventArgs.Empty);
}
}
}
答案 1 :(得分:0)
表单代码应为:
public partial class ImportCreateExcel : Form
{
FolderSelectDDL uc = new FolderSelectDDL();
public ImportCreateExcel()
{
//FolderSelectDDL.OnUserControlButtonClicked += new FolderSelectDDL.ButtonClickedEventHandler(btnSaveToPath_Click);
uc.OnUserControlButtonClicked += new FolderSelectDDL.ButtonClickedEventHandler(btnSaveToPath_Click);
InitializeComponent();
}
private void btnSaveToPath_Click(object sender, EventArgs e)
{
//FolderSelectDDL uc = new FolderSelectDDL(); //a new instance
MessageBox.Show(uc.FolderPath);
}
}
您正在创建一个新实例,这就是blank
的原因。我没试过。如果这里有任何问题。问我。