获取用户控制变量

时间:2013-08-27 16:42:14

标签: c# winforms

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

随时欢迎任何输入。
谢谢!

2 个答案:

答案 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的原因。我没试过。如果这里有任何问题。问我。