创建的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。 所以不会绘制任何文字 我不知道为什么标志值会被重置。
答案 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;
}