要求封装一个按钮:
功能:在click之后按钮变enabled 变成 Flase 执行结束 变回来
同时要增加一个属性就是要不要这个功能:
这个功能为True,则实现上面的功能
为False的时候,则和普通的按钮一样小弟,不懂,请指教!
贴点代码最好拉!
谢谢
功能:在click之后按钮变enabled 变成 Flase 执行结束 变回来
同时要增加一个属性就是要不要这个功能:
这个功能为True,则实现上面的功能
为False的时候,则和普通的按钮一样小弟,不懂,请指教!
贴点代码最好拉!
谢谢
// 增加属性 执行过程中是否禁止属性的按钮(默认禁止)
TLebutButton = class(TButton)
private
FClicksDisabled: Boolean;
public
procedure Click; override; {*
构造器
@param AOwner 所有者
}
constructor Create(AOwner: TComponent); override;
{ Public declarations }
published
// 执行过程中是否禁止的按钮(是-禁止、否-不禁止、默认禁止)
property ClicksDisabled: Boolean read FClicksDisabled write FClicksDisabled default True;
{ Published declarations }
end;procedure TLebutButton.Click;
begin
try
if FClicksDisabled then
Enabled := False;
inherited;
finally
Enabled := True;
end;
end;constructor TLebutButton.Create(AOwner: TComponent);
begin
inherited;
FClicksDisabled := True;
end;
using System.Collections.Generic;
using System.Text;
using System.Windows.Forms;
using System.ComponentModel;namespace lw.CSharp.Test
{
public class WrapperButton : Button
{
public delegate void FeedbackEventHandler(object sender, FeedbackEventArgs e);
public event FeedbackEventHandler OnFeedback; private bool _waitFeedback = true; public WrapperButton()
: base()
{
}
/// <summary>
/// Gets or Sets the value to indicate whether the Button wait for Feedback or not
/// </summary>
[DefaultValue(true),
Description("Gets or Sets the value to indicate whether the Button wait for feedback or not")]
public bool WaitFeedback
{
get { return _waitFeedback; }
set { _waitFeedback = value; }
} protected override void OnClick(EventArgs e)
{
if (_waitFeedback) this.Enabled = false;
base.OnClick(e);
FeedbackEventArgs fe = new FeedbackEventArgs();
fe.e = e;
fe.WaitFeedback = _waitFeedback;
if (OnFeedback != null) OnFeedback(this, fe);
}
} public class FeedbackEventArgs
{
private bool _waitFeedback;
private EventArgs _e; public FeedbackEventArgs() { } public bool WaitFeedback
{
get { return _waitFeedback; }
set { _waitFeedback = value; }
} public EventArgs e
{
get { return _e; }
set { _e = value; }
}
}
}
Test Code:private void wrapperButton1_Click(object sender, EventArgs e)
{
wrapperButton1.OnFeedback += new WrapperButton.FeedbackEventHandler(wrapperButton1_OnFeedback);
MessageBox.Show("Testing...");
} void wrapperButton1_OnFeedback(object sender, FeedbackEventArgs e)
{
wrapperButton1.Enabled = true;
}
{
if (e.WaitFeedback)
{
wrapperButton1.Enabled = true;
}
}
{
if (_waitFeedback) {this.Enabled = false};
base.OnClick(e);
if (_waitFeedback) {this.Enabled = true};
}