1

使用 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
    }
}

路径始终为空白,无论是来自设置为公共的对话框还是变量 FolderPath。

任何意见总是受欢迎的。
谢谢!

4

2 回答 2

1

您已经uc在表单类中有一个,但是您uc在处理程序中定义了一个新的(局部变量),btnSaveToPath_Click它的初始FolderPath属性当然是空的。

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);
     }        
  }
}
于 2013-08-27T16:46:38.410 回答
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。我还没有尝试过。如果这里有什么问题。问我。

于 2013-08-27T16:49:59.350 回答