2

作成された Winusercontrol は、1 つのフォームと 1 つのパネルで構成されます。ユーザー コントロールのパネルのペイント イベントでテキストを描画します。アプリケーションにユーザー コントロールの参照を追加します。

ユーザー制御コード:

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() を呼び出したとき。チェックイン時にペイント イベント フラグの値が false になります。テキストが描画されないため、フラグ値がリセットされる理由がわかりません。

4

4 に答える 4

2

Form loaded イベントの前に Paint イベントが発生する可能性があるため、フラグが false になり、テキストを追加できなくなります。

再描画されるように、パネルを含むユーザー コントロールに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();
}
于 2013-05-27T08:08:31.743 に答える
0

完全な形式のコードを貼り付ける必要があります。別のコンストラクターを作成し、コントロールを作成するときに値を渡します。フォームが読み込まれる前に何らかのイベントが発生している可能性があります。

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

public void Somthing(bool flagValue)
{
   flag= flagValue;
}
于 2013-05-27T08:06:03.373 に答える
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;
}
于 2013-05-27T10:26:32.833 に答える