从父表单调用的子表单中的C#raise事件

时间:2017-12-13 20:19:23

标签: c# events parent-child

我的父表单中有一个工具条菜单,我将我的子表单作为用户控件加载到面板中。当用户点击我父表单中的菜单条时,我需要在我的子表单中触发一个事件。

以下是父控件中的事件:

//Character Name
private void randomNameToolStripMenuItem_Click(object sender, EventArgs e)
{
    try
    {
        if (_SQL_Settings.TabControl == "Character Builder")
        {

        }
        else
        {
            MessageBox.Show("You must be in the Character Builder Screen
                       To Generate A Random Character Name, Please Try Again.");
        }
    }
    catch(Exception ex)
    {

    }
}

//Character
private void randToolStripMenuItem_Click(object sender, EventArgs e)
{
    try
    {
        if (_SQL_Settings.TabControl == "Character Builder")
        {

        }
        else
        {
            MessageBox.Show("You must be in the Character Builder Screen
                           To Generate A Random Character, Please Try Again.");
        }
    }
    catch (Exception ex)
    {

    }
}

这是我在父表单中构建我的子表单的位置:

case "Character Builder":
    {
        Character_Builder CC = new Character_Builder();

        panCC.Controls.Clear();
        CC.Dock = DockStyle.Fill;
        panCC.Controls.Add(CC);

        CC.Main_Menu += Main_Menu;
        break;
    }

以下是我想在用户点击父窗体菜单条项

时触发的功能
private void Generate_Raondom_Character()
{
    try
    {

    }
    catch(Exception ex)
    {

    }
}

private void Generate_Random_Character_Name()
{
    try
    {

    }
    catch (Exception ex)
    {

    }
}

我已经在我的孩子表格中添加了这两个事件,但我认为他们需要以我的父母形式。

活动:

public event EventHandler Random_Character;
        public event EventHandler Random_Name;

有谁知道我需要做些什么才能让它发挥作用?样品会很棒。我知道如何在Vb中做到这一点而不是c#。

1 个答案:

答案 0 :(得分:1)

我有一个解决方案。这不是我想做的,但似乎有效。我正在循环浏览我孩子论坛中的控件,直到找到我想要的控件并编辑控件文本。我想使用事件,但我想这也有效。如果有人有更好的方法,请分享:

if (_SQL_Settings.TabControl == "Character Builder")
            {
                DataTable dt = new DataTable();
                dt = _SQL.Random_Character_Name();

                foreach (Control Parentctrl in panCC.Controls)
                {
                    if (Parentctrl.Name == "Character_Builder")
                    {
                        foreach (Control Childctrl in Parentctrl.Controls)
                        {
                            if (Childctrl.Name == "cbFirstName")
                            {
                                Childctrl.Text = dt.Rows[0]["First_Name"].ToString();
                            }

                            if (Childctrl.Name == "cbLastName")
                            {
                                Childctrl.Text = dt.Rows[0]["Last_Name"].ToString();
                            }

                            if (Childctrl.Name == "cbCharacterTitle")
                            {
                                Childctrl.Text = dt.Rows[0]["Character_Title"].ToString();
                            }
                        }
                    }
                }