none
主窗体与子窗体加载事件的区别问题 RRS feed

  • 常规讨论

  • 现在有一个子窗体中有一个datagridview控件,共有三列,其中一列为图片列; 我在窗体load事件里面加载datagridview时动态改变图片列的图片不可以,但是在按钮的Click事件里面就可以实现,想请教其原因,如果我想要实现load事件里面加载dgv时改变图片应该怎么做?(下附相关代码)
    //load事件无法实现相关功能
     private void ShouJianXiangForm_Load(object sender, EventArgs e)
    {
       this.dgvMyMessage.DataSource = mtm.GetMyMessage(Common .uf.UserId);
       for (int i = 0; i < this.dgvMyMessage.Rows.Count; i++)
      {
          if ((int)this.dgvMyMessage["isNew", i].Value == 1)
         { 
            this.dgvMyMessage["newMessageImage", i].Value = Image.FromFile("images/new.gif");
          }
       }
    }
    //Click事件可以实现相关功能 
     private void button1_Click(object sender, EventArgs e)

        this.dgvMyMessage.DataSource = mtm.GetMyMessage(Common.uf.UserId);
         for (int i = 0; i < this.dgvMyMessage.Rows.Count; i++)
        { 
            if ((int)this.dgvMyMessage["isNew", i].Value == 1)
            {
                 this.dgvMyMessage["newMessageImage", i].Value = Image.FromFile("images/new.gif");
            }
        }
    }
    如果我上例的子窗体设为非子窗体则load事件可以实现相关功能
    2009年12月21日 12:42

全部回复

  • 你好!
         请问你说的”子窗体设为非子窗体“是什么意思,你通过怎样的方式设置的子窗体?
    周雪峰
    2009年12月21日 14:57
    版主
  • 你好!

    将修改代码放在 DataGridView 的 DataBindingComplete 事件中。产生问题的原因是还未真正绑定就执行了修改代码。


    知识改变命运,奋斗成就人生!
    2009年12月22日 1:49
    版主
  • 建议将this.dgvMyMessage["newMessageImage"]这列设置为ImageColumn  然后直接设置其ImageColumn.Image=Image.FromFile("images/new.gif");


    Wenn ich dich hab’,gibt es nichts, was unerträglich ist.坚持不懈!My blog~~~
    2009年12月22日 1:50
    版主
  • "子窗体设为非子窗体"就是说另建一个控件相同的窗体form1,然后将代码复制到form1,再将form1设为启动窗体,这个时候load事件就可以完成即定的功能
    "设置子窗体的方式":例如:先将窗体form2设为主窗体,form2中有一个button,再建一个窗体form3,在form2的button_click事件写如下代码:
    form3 fm=new form3();
    fm.Mdiparent=this;
    fm.show();
    那么form3就是form2的子窗体
    2009年12月22日 2:39
  • 我在窗体里面已经设置了

    2009年12月22日 2:41
  • 问题已解决,非常感谢,但我还想知道:
    1:为什么load事件在子窗体里面就不可以,而在非子窗体面就可以?
    2:load事件与其它事件相比有哪些特点?

    2009年12月22日 3:23
  • DataBindingComplete 事件是在数据绑定完成后触发的。而控件是被加入到界面中才会被绑定。
    知识改变命运,奋斗成就人生!
    2009年12月22日 3:24
    版主
  • 问题已解决,非常感谢,但我还想知道:
    1:为什么load事件在子窗体里面就不可以,而在非子窗体面就可以?
    2:load事件与其它事件相比有哪些特点?

    你好!
         你可以F11单步来来调试,看看this.dgvMyMessage.DataSource是否和预期的一样,看看if ((int)this.dgvMyMessage["isNew", i].Value == 1)是否满足了条件!
       this.dgvMyMessage.DataSource = mtm.GetMyMessage(Common .uf.UserId);
       for (int i = 0; i < this.dgvMyMessage.Rows.Count; i++)
      {
          if ((int)this.dgvMyMessage["isNew", i].Value == 1)
         { 
            this.dgvMyMessage["newMessageImage", i].Value = Image.FromFile("images/new.gif");
          }
       }

    周雪峰
    2009年12月22日 4:34
    版主
  • 单步调试没问题,只是没有效果

    2009年12月22日 12:53