为什么winform面板仅在鼠标悬停或鼠标点击时更新?

时间:2013-01-02 16:52:29

标签: .net linux winforms mono backcolor

我创建了一个测试程序,它应该在linux(PCLinuxOS)下反复来回更改面板的背景色,但它并没有真正起作用。要么它只更新面板的背景颜色只有当你点击某个东西或鼠标悬停在winform上然后它停止或程序在运行一段时间后完全崩溃。

以下是winform在2个面板,按钮和计时器中的外观:

enter image description here

以下是它背后的代码:

namespace TestIndicator;

interface

uses
  System.Drawing,
  System.Collections,
  System.Collections.Generic,
  System.Windows.Forms,
  System.ComponentModel;

type
  /// <summary>
  /// Summary description for MainForm.
  /// </summary>
  MainForm = partial class(System.Windows.Forms.Form)
  private
    method d_Click(sender: System.Object; e: System.EventArgs);
    method timer1_Tick(sender: System.Object; e: System.EventArgs);
  protected
    method Dispose(disposing: Boolean); override;
  public
    constructor;
  end;

var
    TurnOnRx, TurnOnTx:Boolean;

implementation

{$REGION Construction and Disposition}
constructor MainForm;
begin
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent();

  //
  // TODO: Add any constructor code after InitializeComponent call
  //
  TurnOnRx := true;
  TurnOnTx := true;
end;

method MainForm.Dispose(disposing: Boolean);
begin
  if disposing then begin
    if assigned(components) then
      components.Dispose();

    //
    // TODO: Add custom disposition code here
    //
  end;
  inherited Dispose(disposing);
end;
{$ENDREGION}

method MainForm.d_Click(sender: System.Object; e: System.EventArgs);
begin
    timer1.Enabled := not timer1.Enabled;  
end;

method MainForm.timer1_Tick(sender: System.Object; e: System.EventArgs);
begin
    if TurnOnTx then
    begin
        TurnOnTx:=false;
        TxLight.BackColor := Color.Red;
    end
    else
    begin
        TurnOnTx:=true;
        TxLight.BackColor := Color.black;
    end;

    if TurnOnRx then
    begin
        TurnOnRx := false;
        RxLight.BackColor := Color.Lime;
    end
    else
    begin
        TurnOnRx := true;
        RxLight.BackColor := Color.Black;
    end;
end;

end.

1 个答案:

答案 0 :(得分:0)

也许计时器间隔太短,颜色变化太快了?

namespace TestIndicator;
interface
uses
  System.Drawing,
  System.Collections,
  System.Collections.Generic,
  System.Windows.Forms,  
  System.ComponentModel;

type
  /// <summary>
  /// Summary description for MainForm.
  /// </summary>
  MainForm = partial class(System.Windows.Forms.Form)
  private
    method d_Click(sender: System.Object; e: System.EventArgs);
    method timer1_Tick(sender: System.Object; e: System.EventArgs);
  protected
    method Dispose(disposing: Boolean); override;
  public
    constructor;
  end;

var
    TurnOnRx, TurnOnTx:Boolean;

implementation

{$REGION Construction and Disposition}
constructor MainForm;
begin
  //
  // Required for Windows Form Designer support
  //
  InitializeComponent();

  //
  // TODO: Add any constructor code after InitializeComponent call
  //
  TurnOnRx := true;
  TurnOnTx := true;

  timer1.Inverval := 1000; 
end;

method MainForm.Dispose(disposing: Boolean);
begin
  if disposing then begin
    if assigned(components) then
      components.Dispose();

    //
    // TODO: Add custom disposition code here
    //
  end;
  inherited Dispose(disposing);
end;
{$ENDREGION}

method MainForm.d_Click(sender: System.Object; e: System.EventArgs);
begin
    timer1.Enabled := not timer1.Enabled;  
end;

method MainForm.timer1_Tick(sender: System.Object; e: System.EventArgs);
begin
    if TurnOnTx then
    begin
        TurnOnTx:=false;
        TxLight.BackColor := Color.Red;
    end
    else
    begin
        TurnOnTx:=true;
        TxLight.BackColor := Color.black;
    end;

    if TurnOnRx then
    begin
        TurnOnRx := false;
        RxLight.BackColor := Color.Lime;
    end
    else
    begin
        TurnOnRx := true;
        RxLight.BackColor := Color.Black;
    end;

    TxLight.Refresh();
    RxLight.Refresh();

    Application.DoEvents();
end;

end.