C# 更改按钮图像
在表格1中,我有几个按钮,上面有一个类似的图像,表示一个特定的设施,比如说一个网球场。但是,假设现在我单击另一个表单中的另一个按钮预订该特定球场,如何将表单1上的按钮图像更改为另一个图像,以显示该球场已预订?您可以使用事件进行预订 预订操作将触发一个事件,表明设施已预订。C# 更改按钮图像,c#,.net,winforms,.net-2.0,C#,.net,Winforms,.net 2.0,在表格1中,我有几个按钮,上面有一个类似的图像,表示一个特定的设施,比如说一个网球场。但是,假设现在我单击另一个表单中的另一个按钮预订该特定球场,如何将表单1上的按钮图像更改为另一个图像,以显示该球场已预订?您可以使用事件进行预订 预订操作将触发一个事件,表明设施已预订。 Form1将注册一个事件处理程序,并更改按钮的图像以反映设施的状态 编辑(如何处理事件): 公共类FacilityStateChangeEventArgs:EventArgs { 公共设施StateChangeEventArg
Form1将注册一个事件处理程序,并更改按钮的图像以反映设施的状态 编辑(如何处理事件):
公共类FacilityStateChangeEventArgs:EventArgs
{
公共设施StateChangeEventArgs(bool已预订)
{
这个.预订的=预订的;
}
公共bool{get;protected set;}
//…如果您需要其他属性
}
公共类设施
{
私有bool=false;
公共图书馆预订
{
得到
{
把这本书退回来;
}
保护集
{
如果(this.booked==value)返回;
//更改状态并激发事件。
这等于价值;
火变();
}
}
公共事件事件处理程序状态更改;
//当预订发生更改时,您将使用此方法
公众假期
{
如果(this.StateChange!=null)this.StateChange(this,new FacilityStateChangeEventArgs(this.Booked));
}
}
//使用“图像”按钮创建窗体。
公共类FormWithButton
{
Button button1=新按钮();
公共空间
{
//您将从您的业务实例中获得该设施。
设施=新设施();
facility.StateChange+=新事件处理程序(facility\u StateChange);
}
无效设施状态更改(对象发送方、设施状态更改事件参数e)
{
如果(e.Booked)按钮1.Image=null;//Booked Image
else按钮1.Image=null;//自由映像
}
}
更改按钮的图像属性以显示其他资源。乙二醇/
using namespace.Properties;
namespace namespace
{
private void button1_Click(object sender, EventArgs e)
{
button1.Image = Resources.pictureName;
}
}
您可以将该球场是否已预订的信息保存在数据库中,然后根据数据库中的bool字段返回图片
乙二醇
您有一个数据库,其中有一个名为court的表,因此字段是id(pk)、name和isBooked(bool)
在页面加载时,您可以
sqlconnection con = new sqlconnection("insert connstring here");
sqlcommand com = new sqlcommand("select isBooked from court where id = @id", con);
con.open();
sqldatareader reader = com.executereader();
while(reader.read())
{
bool booked = (bool)reader["isBooked"];
}
if(booked = true)
//one picture as above
else
//another picture
请原谅我的代码太草率了,这只是一个例子,好吧,我假设您是从Form1启动预订表单的,您在Form1中显示了Court的按钮。因此,代码在Form1中看起来会像这样(在这里您有一个court image按钮): 现在,当在预订表单上单击该按钮时,您的球场图像按钮将更改其图像 如果是2005年,即.Net 2.0,那么我们没有lambda,代码如下:
FormBooking frm = new FormBooking();
frm.Controls["nameofbooking_button"].Click += new EventHandler(ChangeImage);
frm.Show();
然后在你的Form1课程中:
private void ChangeImage(object sender, EventArgs e)
{
//The button with the court image
this.CourtImageButton.Image = Image.FromFile(@"C:\courtbooked.png");
}
如果不与数据库通信,只需使用此选项 表单一个按钮单击此处显示其他表单表单2
Form2 frmtwo = new Form2(this);
frmtwo.ShowDialog();
然后在第二个表单构造函数中添加
Form Frmtwo;
public Form2(Form frm)
{
InitializeComponent();
Frmtwo = frm;
}
然后将此代码添加到按钮中,单击要以第一种形式显示图像的位置
PictureBox pc = (PictureBox)Frmtwo.Controls["pictureBox1"];
pc.ImageLocation = @"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\1.jpg";
谢谢你的回复,我该如何使用这个事件和事件处理程序?@pacheco:我在三周前为我的答案添加了代码,你可能错过了。嗨,谢谢你的回复。如果我想更改的按钮是另一种形式,该怎么办?数据库选项是最好的,因为信息将取自数据库。查看我将在原始postHi上进行的编辑,我正在考虑通过db进行编辑,在你建议之后,但我使用OleDb,代码会有什么不同?不确定没有使用OleDb,我相信这只是对oledbsqlconnection的sqlconnection/命令和datareader等更改,但我从未使用过OleDb,因此我无法真正帮助sorryHi,谢谢你的回复。如果在this.CourtImageButton.image=的参考资料中称为courtbooked.png,如何插入图像?语句?我得到以下错误:对象引用未设置为对象的实例。此行:frm.Controls[“Court1Button”]。单击+=new EventHandler(ChangeImage);确保Court1Button是按钮的名称,而不是设计器上的实例名称右键单击按钮(如上所述Court1Button)并选择Properties。然后查找名称,它是您应该在指定答案中使用的名称。(请注意,名称应完全相同(区分大小写)
Form Frmtwo;
public Form2(Form frm)
{
InitializeComponent();
Frmtwo = frm;
}
PictureBox pc = (PictureBox)Frmtwo.Controls["pictureBox1"];
pc.ImageLocation = @"C:\Documents and Settings\All Users\Documents\My Pictures\Sample Pictures\1.jpg";