标志值将在usercontrol paint事件上重置

时间:2013-05-27 08:00:58

标签: c# .net user-controls

创建的Winusercontrol由1个表单和1个面板组成。 在用户控件面板的绘制事件上绘制一些文本。 在我的应用程序中添加usercontrol的引用。

usercontrol代码:

bool flag=false;
public void Somthing()
{
  ///some code...
  ///
  flag=true;
}

protected void panel_paint(PainteventArgs e)
{
 if(flag==true)
   //draw some text
}

表格申请代码:

private void frmMain_Load(object sender, EventArgs e)   
{
   usercontrol obj=new usercontrol();
   obj.Somthing();
}

当我创建库的对象并调用Somthing()时。 当检查paint事件标志值时将为false。 所以不会绘制任何文字 我不知道为什么标志值会被重置。

4 个答案:

答案 0 :(得分:2)

也许Paint事件在Form加载事件之前触发,因此您的标志为false,您将永远无法添加文本。

尝试向包含Panel的用户控件添加Invalidate(),以便重新绘制。

public void Somthing()
{
  flag=true;
  this.Invalidate();

  //EDIT: it couldn't be synchronous so force with Update that sends WM_PAINT event
  this.Update();
}

答案 1 :(得分:1)

在设置paint值后,使用Invalidate方法调用/触发flag事件:

  

Control.Invalidate() 使控件的整个表面无效并导致重绘控件。

示例代码:

private bool _flag;

public bool Flag
{
    get { return _flag; }
    set
    {
        _flag = value;
        Invalidate();
    }
}

public void Somthing()
{
    ///some code...
    ///
    Flag = true;
}

protected void panel_paint(PainteventArgs e)
{
    if(Flag == true)
        //draw some text
} 

答案 2 :(得分:0)

您应该粘贴完整的表单代码。我会创建另一个构造函数并在创建控件时传递该值。也许某些事件在表单加载 之前被触发:

bool flag=false;
public void Somthing()
{
  ///some code...
  ///
  flag=true;
}

public void Somthing(bool flagValue)
{
   flag= flagValue;
}

答案 3 :(得分:0)

使旗帜静止。

static bool flag=false;
public void Somthing()
{
  ///some code...  
  flag=true;
}

protected void panel_paint(PainteventArgs e)
{
 if(flag==true)
   //draw some text
   ///Set here
   flag=false;
}