怎么将窗体的列表值传送到自定义控件中去?

忿奋逸龙 2016-04-20 05:18:25
我想实现的功能就是:
窗体的自定义控件加载之后,把窗体中定义的列表【a】传送到自定义控件中,并调用函数【aaa】,把列表值添加到comboboxedit中去,请问主窗体和自定义控件的问号那里应该怎么写代码?请指点一下?感谢啊!

窗体的问号那里是:自定义控件中定义的自定义事件,应该怎么写?
自定义的问号那里是:我想在这里应该是调用自定义事件,可是这个事件的参数应该怎么写?

先上传一下窗体的代码:

namespace WindowsFormsApplication6
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

List<string> a = new List<string>() { "1", "2", "3" };

private void codeAll1_userComboboxList(object sender, EventArgs e)
{
//??????????????????????????????????????
}
}
}


上传一下自定义控件的代码:

namespace MyControl
{
public partial class codeAll : UserControl
{
public codeAll()
{
InitializeComponent();
}

public delegate void comboboxListHandle(object sender, EventArgs e); //定义委托
public event comboboxListHandle userComboboxList; //定义事件

private void codeAll_Load(object sender, EventArgs e)
{
//userComboboxList(this, new eventArgsParameter(m));
//??????????????????????????????????????????????????
}

public void aaa(ComboBoxEdit a, List<string> b)
{
a.Properties.Items.Clear();
for (int i = 0; i < b.Count; i++)
{
a.Properties.Items.Add(b[i]);
}
}
}

public class eventArgsParameter : EventArgs
{
public eventArgsParameter(List<string> b)
{
a = b;
}

private List<string> a;
public List<string> parameter
{
set { a = value; }
}
}
}


我想实现的功能就是:
窗体的自定义控件加载之后,把列表传送到自定义控件的comboboxedit中去,请问主窗体和自定义控件的???那里应该怎么写代码?请指点一下?感谢啊!
...全文
143 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
枫0子K 2016-04-21
  • 打赏
  • 举报
回复
引用 8 楼 fenfelong2012 的回复:
[quote=引用 6 楼 Yokeqi 的回复:] 甚至你都不用这么复杂的逻辑,因为在Form的Loaded事件里事实上也可以认为是自定义控件的Loaded事件触发时机。 而你自定义控件中的【aaa】方法是public的,可以直接调用,那代码就可以很简洁了。
codeAll code = new codeAll();// 模拟窗体上的自定义控件
List<string> a = new List<string>() { "1", "2", "3" };
private void Form1_Load(object sender, EventArgs e)
{
    // 直接在Form的Load事件里面做这个方法的调用即可。因为这个方法的public
    code.aaa(a);
}

public partial class codeAll : UserControl
{
    // 模拟自定义控件上的ComboBoxEdit控件,你们也是用Dev,哈
    ComboBoxEdit a = new ComboBoxEdit();

    public void aaa(List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
1:我已经想到了在窗体直接调用【aaa】函数,是个好办法,但是目前这个代码有问题,就还是想找到问题所在,不然心里就特别的不舒服,不甘心。 2:我是机械设计出身,半路出家,最近要做设备,除了机械设计,还要做视觉和PC上位机,赶鸭子上架,C#还是好多都不懂啊![/quote] 有求知欲,求之而不得是这样的感觉,我也是这个类型,哈哈。有什么C#方面不懂的可以问我,一般的都能帮你解决。 然而我觉得目前来说做机械、硬件方面,比学C#更有发展前景一些。
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 6 楼 Yokeqi 的回复:
甚至你都不用这么复杂的逻辑,因为在Form的Loaded事件里事实上也可以认为是自定义控件的Loaded事件触发时机。 而你自定义控件中的【aaa】方法是public的,可以直接调用,那代码就可以很简洁了。
codeAll code = new codeAll();// 模拟窗体上的自定义控件
List<string> a = new List<string>() { "1", "2", "3" };
private void Form1_Load(object sender, EventArgs e)
{
    // 直接在Form的Load事件里面做这个方法的调用即可。因为这个方法的public
    code.aaa(a);
}

public partial class codeAll : UserControl
{
    // 模拟自定义控件上的ComboBoxEdit控件,你们也是用Dev,哈
    ComboBoxEdit a = new ComboBoxEdit();

    public void aaa(List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
1:我已经想到了在窗体直接调用【aaa】函数,是个好办法,但是目前这个代码有问题,就还是想找到问题所在,不然心里就特别的不舒服,不甘心。 2:我是机械设计出身,半路出家,最近要做设备,除了机械设计,还要做视觉和PC上位机,赶鸭子上架,C#还是好多都不懂啊!
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 5 楼 Yokeqi 的回复:
楼主,你这段代码不行,不能实现你要的功能,帮你修改如下: Form窗体代码
List<string> a = new List<string>() { "1", "2", "3" };
private void codeAll1_userComboboxList(object sender, eventArgsParameter e)
{
    e.parameter = a;
}
自定义控件代码
public partial class codeAll : UserControl
{
    public delegate void comboboxListHandle(object sender, eventArgsParameter e);    //定义委托
    public event comboboxListHandle userComboboxList;                        //定义事件

    private void codeAll_Load(object sender, EventArgs e)
    {
        if (userComboboxList != null)
        {
            var args = new eventArgsParameter();
            userComboboxList(this, args);
            aaa(a, args.parameter);
        }
    }

    public void aaa(ComboBoxEdit a, List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
public class eventArgsParameter : EventArgs
{
    public eventArgsParameter()
    {
        a = new List<string>();
    }

    private List<string> a;
    public List<string> parameter
    {
        get { return a; }
        set { a = value; }
    }
}
非常非常感谢!看了你的代码,终于找到原因了。已经搞定了。
枫0子K 2016-04-21
  • 打赏
  • 举报
回复
甚至你都不用这么复杂的逻辑,因为在Form的Loaded事件里事实上也可以认为是自定义控件的Loaded事件触发时机。 而你自定义控件中的【aaa】方法是public的,可以直接调用,那代码就可以很简洁了。
codeAll code = new codeAll();// 模拟窗体上的自定义控件
List<string> a = new List<string>() { "1", "2", "3" };
private void Form1_Load(object sender, EventArgs e)
{
    // 直接在Form的Load事件里面做这个方法的调用即可。因为这个方法的public
    code.aaa(a);
}

public partial class codeAll : UserControl
{
    // 模拟自定义控件上的ComboBoxEdit控件,你们也是用Dev,哈
    ComboBoxEdit a = new ComboBoxEdit();

    public void aaa(List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
枫0子K 2016-04-21
  • 打赏
  • 举报
回复
楼主,你这段代码不行,不能实现你要的功能,帮你修改如下: Form窗体代码
List<string> a = new List<string>() { "1", "2", "3" };
private void codeAll1_userComboboxList(object sender, eventArgsParameter e)
{
    e.parameter = a;
}
自定义控件代码
public partial class codeAll : UserControl
{
    public delegate void comboboxListHandle(object sender, eventArgsParameter e);    //定义委托
    public event comboboxListHandle userComboboxList;                        //定义事件

    private void codeAll_Load(object sender, EventArgs e)
    {
        if (userComboboxList != null)
        {
            var args = new eventArgsParameter();
            userComboboxList(this, args);
            aaa(a, args.parameter);
        }
    }

    public void aaa(ComboBoxEdit a, List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
public class eventArgsParameter : EventArgs
{
    public eventArgsParameter()
    {
        a = new List<string>();
    }

    private List<string> a;
    public List<string> parameter
    {
        get { return a; }
        set { a = value; }
    }
}
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 3 楼 duanzi_peng 的回复:
eventArgsParameter 这个参数定义,没有地方使用。
是啊,我想的是在调用自定义事件的时候用,可是却不知道这个自定义事件怎么用?能不能教一下,搞了一天多了,也没有搞明白?
  • 打赏
  • 举报
回复
eventArgsParameter 这个参数定义,没有地方使用。
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 1 楼 rocmemory 的回复:
load函数是控件加载时发生的,而你的传值发生在加载以后,管load何用?你只需给控件的parameter属性赋值就可以了 .parameter=a 然后在自定义控件中把这个List呈现出来
感谢您的回复,你的意思我明白了。但是我还有点不太明白的是,我要在窗体的自定义事件中给控件的parameter属性赋值,我首先要在自定义控件中调用userComboboxList这个自定义事件吧,你说不能放在load函数里,那应该放在哪里呢?这个自定义控件的参数值我应该写什么?
为轮子而生 2016-04-21
  • 打赏
  • 举报
回复
load函数是控件加载时发生的,而你的传值发生在加载以后,管load何用?你只需给控件的parameter属性赋值就可以了 .parameter=a 然后在自定义控件中把这个List呈现出来
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 10楼我是你的主体 的回复:
[quote=引用 9 楼 Yokeqi 的回复:] [quote=引用 8 楼 fenfelong2012 的回复:] [quote=引用 6 楼 Yokeqi 的回复:] 甚至你都不用这么复杂的逻辑,因为在Form的Loaded事件里事实上也可以认为是自定义控件的Loaded事件触发时机。 而你自定义控件中的【aaa】方法是public的,可以直接调用,那代码就可以很简洁了。
codeAll code = new codeAll();// 模拟窗体上的自定义控件
List<string> a = new List<string>() { "1", "2", "3" };
private void Form1_Load(object sender, EventArgs e)
{
    // 直接在Form的Load事件里面做这个方法的调用即可。因为这个方法的public
    code.aaa(a);
}

public partial class codeAll : UserControl
{
    // 模拟自定义控件上的ComboBoxEdit控件,你们也是用Dev,哈
    ComboBoxEdit a = new ComboBoxEdit();

    public void aaa(List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
1:我已经想到了在窗体直接调用【aaa】函数,是个好办法,但是目前这个代码有问题,就还是想找到问题所在,不然心里就特别的不舒服,不甘心。 2:我是机械设计出身,半路出家,最近要做设备,除了机械设计,还要做视觉和PC上位机,赶鸭子上架,C#还是好多都不懂啊![/quote] 有求知欲,求之而不得是这样的感觉,我也是这个类型,哈哈。有什么C#方面不懂的可以问我,一般的都能帮你解决。 然而我觉得目前来说做机械、硬件方面,比学C#更有发展前景一些。[/quote] 感谢,不介意的话,还真的是以后想多麻烦你一下。现在就有个小问题再请教一下,是上午这个问题的延伸: 我在窗体上有个panel,根据不同的条件panel加载不同的自定义控件: 当我加载上午生成的这个自定义控件时候,无法传值进去到自定义控件。我想是不是自定义控件中不应该写在load中?那应该卸载哪里比较合适?[/quote]呵呵,不好意思,我知道哪里错了。
忿奋逸龙 2016-04-21
  • 打赏
  • 举报
回复
引用 9 楼 Yokeqi 的回复:
[quote=引用 8 楼 fenfelong2012 的回复:] [quote=引用 6 楼 Yokeqi 的回复:] 甚至你都不用这么复杂的逻辑,因为在Form的Loaded事件里事实上也可以认为是自定义控件的Loaded事件触发时机。 而你自定义控件中的【aaa】方法是public的,可以直接调用,那代码就可以很简洁了。
codeAll code = new codeAll();// 模拟窗体上的自定义控件
List<string> a = new List<string>() { "1", "2", "3" };
private void Form1_Load(object sender, EventArgs e)
{
    // 直接在Form的Load事件里面做这个方法的调用即可。因为这个方法的public
    code.aaa(a);
}

public partial class codeAll : UserControl
{
    // 模拟自定义控件上的ComboBoxEdit控件,你们也是用Dev,哈
    ComboBoxEdit a = new ComboBoxEdit();

    public void aaa(List<string> b)
    {
        a.Properties.Items.Clear();
        for (int i = 0; i < b.Count; i++)
        {
            a.Properties.Items.Add(b[i]);
        }
    }
}
1:我已经想到了在窗体直接调用【aaa】函数,是个好办法,但是目前这个代码有问题,就还是想找到问题所在,不然心里就特别的不舒服,不甘心。 2:我是机械设计出身,半路出家,最近要做设备,除了机械设计,还要做视觉和PC上位机,赶鸭子上架,C#还是好多都不懂啊![/quote] 有求知欲,求之而不得是这样的感觉,我也是这个类型,哈哈。有什么C#方面不懂的可以问我,一般的都能帮你解决。 然而我觉得目前来说做机械、硬件方面,比学C#更有发展前景一些。[/quote] 感谢,不介意的话,还真的是以后想多麻烦你一下。现在就有个小问题再请教一下,是上午这个问题的延伸: 我在窗体上有个panel,根据不同的条件panel加载不同的自定义控件: 当我加载上午生成的这个自定义控件时候,无法传值进去到自定义控件。我想是不是自定义控件中不应该写在load中?那应该卸载哪里比较合适?

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧