小妹妹我穷,可我不想放弃啊^!!!!!!!!!!!希望各位大哥哥,大姐姐帮帮忙,真的感激不尽.至于分吗?等我可以挣得分,我也不想这样回答,可真的没有办法啊VS2005 开发 Winform C#
A . B C三个窗口
A与B的关系,在A窗体中有一个splitContainer控件,分成左右两块面板,而B窗口就放在右边,以控件的形式嵌入了.C是独立的
A的 click事件中,订阅了 C事件,B对象的方法.
objC.myEvent+=new myDelegate(objB.myMethod);
C的 click事件中,引发方法,
myEvent(string s);
 定义委托的时候myDelegate(string dddd)
而B中,是方法, myMethod(string sss)
根据传进来的值,我需要填充到B窗口的文本框中.
而此刻的问题是,为什么B中没有值(从C那里传来的值啊) 啊?
也就是说怎么就没有值到到B窗口的文本框中.同样D窗口,嵌入A窗体左边面板.
当双击树节点,传值给B,在pictureBox需要重新查数据,重新绘制.按道理讲,也是委托,刷新控件就可以重新绘制.但是我可以得到传来的值,并查出数据,但是如果要看到结果,就必须先移动窗体才行啊.

解决方案 »

  1.   

    我比较喜欢穷MM,而且还是林MM
    不过还是建议你贴一点关键代码。
    按你的说法,似乎没什么不妥,但个人认为,你漏掉了某些细节
      

  2.   

    C的 click事件中,引发方法, 
    myEvent(string s); 
    这里在C的click事件里最好跟一下断点,确认是否真的执行了委托的事件(B中的方法myMethod(string sss) )
    确实你的逻辑是没问题的,大概只能靠仔细跟一下你的代码了
      

  3.   

    1 确认A 是否click
    2 确认对象引用
    3 画面实在不能刷新 就 sendmessage 触发 paint事件吧
      

  4.   

    A的 click事件
       frmC objC = new frmC ();
                frmB objB = new frmB ();
                objC.myEvent += new myColor(objB.color_value);
                objColor.Show();
    C的窗体
    在命名空间里  public delegate void myColor(Color s);
    public event myColor myEvent;
    C的 click事件中
    if (myEvent != null)
                {
                    myEvent((Color)panel1.BackColor);
                    this.Close();
                }
    B的方法
    public void color_value(Color c)        
            {
                textBox1.BackColor = c;
            }D的窗口click事件
    frmB objB = new frmB ();
    //本来是在这里订阅事件得. this.ShowUpdate += new DisplayUpdate(Refresh_Method);
    //以及方法,可是怎么都触发不了啊.
    在B中定义
    public delegate void DisplayUpdate();
     public event DisplayUpdate ShowUpdate;
    public frmB ()
            {
                InitializeComponent();
                
                this.ShowUpdate += new DisplayUpdate(Refresh_Method);
            }
    private void Refresh_Method()
            { 
                pictureBox1.Refresh();
            }
    pictureBox1_Paint(){
    int newd = objD.Flag;// Flag是属性,set了选择记录值,get返回了
                if (newd > 0 && ShowUpdate!=null)
                {
    根据newd查询,返回数据集,然后
    GDI作图.
    ShowUpdate();//一旦启动,不仅是抖,而且接近与死啊,
    }
    }
    真不知道是难在哪里了,难与上青天啊.
      

  5.   

    问问zhangxiuju 
    "3 画面实在不能刷新 就 sendmessage 触发 paint事件吧"
    这是何解呢?
      

  6.   

    跟你说,你是在pictureBox1_Paint中调用ShowUpdate,而它已经委托给Refresh_Method,然后在Refresh_Method中调用pictureBox1.Refresh(),而pictureBox1.Refresh()会要求pictureBox1重绘,因此又会触发pictureBox1_Paint。
    “//一旦启动,不仅是抖,而且接近与死啊, ”知道原因了吧
      

  7.   

     C click 后能关闭吗,别加 ==null的判断 画面刷新你搞的太复杂啦,在pictureBox1.Refresh()前把pictureBox1_Paint事件用 -= 取消 另外为什么在click事件中 new B 或 D ,那样每次都会生成新的对象,建议放在外面
      

  8.   

    谢谢,lake_cx 
    我明白了!!!
    由于下午,csdn我很难才能登录,因此……
    也许我第一方法,在D窗体,去刷新B窗体,行不通,我改道,改成这样,惭愧惭愧.再次谢谢你们的热心,我虽不能归还给你们本人帮助,但我也会去帮助我能帮助的。大家一起加油,一起努力
      

  9.   

    这次是我失误,害得大家没有分啊……等我下次lake_cx zhangxiuju ruanbl 
    三位再补给你们,或者你们告诉我怎么补救,我上次是去结得时候直接就会问哪些加分,这次居然没有