C# 问题事件名称 bex问题

共有 2866 人关注过本帖
标题:C#事件调用
等 级:新手上路
帖 子:31
&&问题点数:0&&回复次数:10&&&
C#事件调用
请求各位给我解答一下!(事件调用)
private void txtInput_TextChanged(object sender, EventArgs e)
&&&&&&&&&&&&String strInput = txtInput.Text.ToString().Trim();
&&&&&&&&&&&&SqlConnection myConnection = new SqlConnection
(&server=database=ProductDTrusted_Connection=user id=;password=&);
&&&&&&&&&&&&SqlDataAdapter orderdet = new SqlDataAdapter(&select
pId,pName,pModel,pUnit,pColor,pPurchasePrice,pMinAmount from Product where pId like '%& +
strInput + &%' or pName like '%& + strInput + &%'&, myConnection);
&&&&&&&&&&&&DataTable dt = new DataTable();
&&&&&&&&&&&&orderdet.Fill(dt);
&&&&&&&&&&&&dataProductBill.DataSource = dt.DefaultV
&&&&&&&&&&&&//dataProductBill_CellMouseDoubleClick(null,null);
&&& &&& //想在这里调用dataProductBill_CellMouseDoubleClick()这个事件,但调用这个事件都没有反应的,可能是参数的问题吧!
&&&private void dataProductBill_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
&&&&&&&&&&&&try
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& //获取DataGirdView中的值
&&&&&&&&&&&&&&& String strId = dataProductBill.CurrentRow.Cells[&pId&].Value.ToString();
&&&&&&&&&&&&&&& String strName = dataProductBill.CurrentRow.Cells[&pName&].Value.ToString();
&&&&&&&&&&&&&&& String strModel = dataProductBill.CurrentRow.Cells[&pModel&].Value.ToString();
&&&&&&&&&&&&&&& String strUnit = dataProductBill.CurrentRow.Cells[&pUnit&].Value.ToString();
&&&&&&&&&&&&&&& String strColor = dataProductBill.CurrentRow.Cells[&pColor&].Value.ToString();
&&&&&&&&&&&&&&& String strPuchasePrice = dataProductBill.CurrentRow.Cells[&pConsultPrice&].Value.ToString();
&&&&&&&&&&&&&&& String strMinAmount = dataProductBill.CurrentRow.Cells[&pMinAmount&].Value.ToString();
&&&&&&&&&&&&&&& String strManufacturer = dataProductBill.CurrentRow.Cells[&pManufacturer&].Value.ToString();
&&&&&&&&&&&&&&& String strRemark = dataProductBill.CurrentRow.Cells[&pRemark&].Value.ToString();
&&&&&&&&&&&&&&& FrmProductInfo fr = new FrmProductInfo(strId, strName, strModel, strUnit, strColor, strPuchasePrice, strMinAmount, strManufacturer, strRemark);
&&&&&&&&&&&&&&& fr.Owner =&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& fr.ShowDialog();
&&&&&&&&&&&&&&& label3.Text = strContent.ToString ();
&&&&&&&&&&&&&&& label4.Text = strN
&&&&&&&&&&&&&&& label5.Text = strName1;&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&& fr.Dispose();
&&&&&&&&&&&&&&& fillData();&&&&&&&&&
&&&&&&&&&&&&}
&&&&&&&&&&&&catch
&&&&&&&&&&&&{
&&&&&&&&&&&&&&& MessageBox.Show(&没有可选商品!&, &警告&, MessageBoxButtons.OK, MessageBoxIcon.Warning);
&&&&&&&&&&&&}
搜索更多相关主题的帖子:
来 自:江苏扬州蹩脚小公司
等 级:论坛游民
帖 子:242
专家分:22
程序代码:
dataProductBill.CellMouseDoubleClick += new EventHandler(dataProductBill_CellMouseDoubleClick);
注册事件时写好+=按2次&tab&键就会帮你写好的!
太可恶了,居然不能超过100个字符!
这区区100个又怎么能概括我平凡而又伟大的一生!
等 级:新手上路
帖 子:24
等 级:新手上路
帖 子:19
来学习了一下
等 级:新手上路
帖 子:31
[bo][un]shmilylee[/un] 在
10:21 的发言:[/bo]
dataProductBill.CellMouseDoubleClick += new EventHandler(dataProductBill_CellMouseDoubleClick);
注册事件时写好+=按2次&tab&键就会帮你写好的!
谢谢你的指教!可是怎么会报错的啊!错误如下:
附件: 只有本站会员才能下载或查看附件,请
等 级:贵宾
威 望:34
帖 子:506
CellMouseDoubleClick事件所使用的委托是DataGridViewCellMouseEventHandler,该委托的构造如下:
public delegate void DataGridViewCellMouseEventHandler(object sender, DataGridViewCellMouseEventArgs e);
委托所使用的型参列表是object sender, DataGridViewCellMouseEventArgs e,因此你构造一个事件方法的型参列表需与此一致:
private void dataProductBill_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e).
具体修改如下:
修改注册事件的语句为:
dataProductBill.CellMouseDoubleClick += new DataGridViewCellMouseEventHandler(dataProductBill_CellMouseDoubleClick);
并修改事件方法的参数以符合要求:
private void dataProductBill_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
等 级:论坛游侠
帖 子:104
专家分:117
斑竹真是高手,对于C#中事件驱动模型的理解非常透彻。佩服!
等 级:新手上路
帖 子:31
[bo][un]铲铲[/un] 在
15:42 的发言:[/bo]
CellMouseDoubleClick事件所使用的委托是DataGridViewCellMouseEventHandler,该委托的构造如下:
public delegate void DataGridViewCellMouseEventHandler(object sender, DataGridViewCellMouseEventArgs e);
谢谢你的指教,那么准确来说,在我上面的那段程序中,我应该怎么使用呢?能明确点告诉我吗?谢谢
等 级:新手上路
等 级:新手上路
帖 子:31
[bo][un]铲铲[/un] 在
15:42 的发言:[/bo]
CellMouseDoubleClick事件所使用的委托是DataGridViewCellMouseEventHandler,该委托的构造如下:
public delegate void DataGridViewCellMouseEventHandler(object sender, DataGridViewCellMouseEventArgs e);
那么在我上面那段程序中,该具体怎么应用呢?谢谢
版权所有,并保留所有权利。
Powered by , Processed in 0.024875 second(s), 8 queries.
Copyright&, BCCN.NET, All Rights Reservedc#control类和resize事件问题-c/c++-电脑编程网c#control类和resize事件问题作者:as010wxw 和相关&&private void Form1_Resize(object sender, EventArgs e)&
Control control = (Control)//-----------------(1)&
// Ensure the Form remains square (Height = Width).&
if (control.Size.Height != control.Size.Width)&
control.Size = new Size(control.Size.Width, control.Size.Width);&
}--------------------------------------------------------------------------------(1)object sender是事件源,一个控件,而control类是所有控件基类,好像不能强制转换吧?(2)下面的if条件句怎么保证Height=Width??------回答---------------其他回答(20分)---------C# code
void Form1_Resize(object sender, EventArgs e)
{
Control control = sender as C
if (control != null && control.Width != control.Height)
control.Width = control.H
------其他回答(20分)---------sender是object类型的,不转换一下,Size等属性用不了
------回答---------------其他回答(20分)---------
C# code
void Form1_Resize(object sender, EventArgs e)
{
Control control = sender as C
if (control != null && control.Width != control.Height)
control.Width = control.H
------其他回答(20分)---------
sender是object类型的,不转换一下,Size等属性用不了
相关资料:|||||||c#control类和resize事件问题来源网络,如有侵权请告知,即处理!编程Tags:                &                    Posts - 610, Comments - 29674
其实使用C#这么多年,我时不时会遇到一些令人不爽的设计缺陷。这些缺陷大都是些限制,虽说无伤大雅,也很容易避免,但一旦遇到这些情况,总会令人心生不快,毕竟都是些无谓的限制。而且令人遗憾的是,虽说去除这些限制也不会带来什么问题,但我认为C#设计团队也基本不会去修复这些问题了,毕竟它们大都是些细枝末节。作为一名用C#的纯种码农,我突然一时兴起也要把这些设计缺陷记录下,也方便和大伙一起讨论下。那么这次就先从实现接口内的事件说起,当我们需要显式实现一个接口内的事件时,会发现我们必须提供add和remove访问器,这还会稍许影响到事件常用的使用模式。
强制add和remove访问器
这个问题听上去有些绕,不过看代码便一清二楚。例如,在项目中我会定义一个这样的INotifyPropertyChanged接口,其中包含一个PropertyChanged事件:
public interface INotifyPropertyChanged&TPropertyIdentity&
event EventHandler&PropertyChangedEventArgs&TPropertyIdentity&& PropertyC
public class PropertyChangedEventArgs&TPropertyIdentity& : EventArgs
public PropertyChangedEventArgs(TPropertyIdentity propertyIdentity)
this.PropertyIdentity = propertyI
public TPropertyIdentity PropertyIdentity { get; private set; }
可以看出这个接口和.NET内置的INotifyPropertyChanged事件可谓如出一辙,其实他们的目的也一样,就是向外通知该对象的某个属性发生了改变。不同的是,系统内置的PropertyChangedEventArgs对象使用属性名,也就是一个字符串标识一个属性,而在如上带泛型的PropertyChangedEventArgs里,则可以使用任意类型的对象来标识属性,这无疑带来的更多的灵活性。例如,我们可以使用连续的整型数值来标识对象,这样我们就可以使用数组来创建一个索引,它的性能会比使用字符串为键值的字典要高出一些。
不过,我们实现系统自带的INotifyPropertyChanged属性时,并非是要“自行使用”,而往往是想让通知其他组件,例如ORM框架或是UI控件。因此,它其实已经是.NET平台上的统一约定,即便有所不足,也不能舍弃它。因此,我们往往需要在一个对象上同时实现两种INotifyPropertyChanged接口,例如:
public class Item : INotifyPropertyChanged&int&, INotifyPropertyChanged
public event EventHandler&PropertyChangedEventArgs&int&& PropertyC
event PropertyChangedEventHandler INotifyPropertyChanged.PropertyChanged
add { throw new NotImplementedException(); }
remove { throw new NotImplementedException(); }
以上是Visual Studio为两个事件实现自动生成的代码框架,且看第二个事件,它要求我们提供add和remove访问器。为什么?我不知道,:
Interesting question. I did some poking around the language notes archive and I discovered that this decision was made on the 13th of October, 1999, but the notes do not give a justification for the decision.
Off the top of my head I don't see any theoretical or practical reason why we could not have field-like explicitly implemented events. Nor do I see any reason why we particularly need to. This may have to remain one of the mysteries of the unknown.
是老牌C#团队成员了,经常在Stack Overflow或是博客上写一些C#的设计内幕,可惜在这个问题上连他也认为是个“不解之谜”。此外,“自动属性”让这个限制进一步显得“无厘头”了,因为我们完全可以这么显式实现接口里的属性:
public interface INameProvider
string Name { get; set; }
public class MyNameProvider : INameProvider
string INameProvider.Name { get; set; }
既然如此,事件跟它又有什么本质区别呢?
顺便一提,我们知道,在C#里不能把显式实现的接口成员标注为抽象成员,这对于事件来说还存在一些额外的问题。且看以下代码片段:
public abstract class Base : INotifyPropertyChanged&MyIdentity&
public EventHandler&PropertyChangedEventArgs&MyIdentity&& PropertyC
protected void OnPropertyChanged(PropertyChangedEventArgs&MyIdentity& args)
var propertyChanged = this.PropertyC
if (propertyChanged != null)
propertyChanged(this, args);
Base是个基类,因此它往往会暴露个OnXyz方法,以便子类触发Xyz事件。在OnPropertyChanged方法中,我们会先判断_propertyChanged是否为null,因为null表示还没有人注册过事件——这是事件使用时的常见模式。事件本身没有注册任何处理器,则意味着事件本身不触发亦可,同样意味着我们甚至可以不去创建事件所需的EventArgs参数。但是,如果我们是要在子类里触发事件(即调用OnXxx方法),则没有办法检查该事件有没有注册处理器。假如这个EventArgs对象创建起来成本较高,就会造成一定的性能损失。
解决方法倒也简单,例如,在基类里增加一个事件:
public abstract class Base : INotifyPropertyChanged&MyIdentity&
public abstract event EventHandler&PropertyChangedEventArgs&MyIdentity&& MyIdentityPropertyC
event EventHandler&PropertyChangedEventArgs&MyIdentity&& INotifyPropertyChanged&MyIdentity&.PropertyChanged
add { this.MyIdentityPropertyChanged += value; }
remove { this.MyIdentityPropertyChanged -= value; }
或干脆加一个“延迟”构造EventArgs的重载:
public abstract class Base : INotifyPropertyChanged&MyIdentity&
private EventHandler&PropertyChangedEventArgs&MyIdentity&& _propertyC
event EventHandler&PropertyChangedEventArgs&MyIdentity&& INotifyPropertyChanged&MyIdentity&.PropertyChanged
add { this._propertyChanged += value; }
remove { this._propertyChanged -= value; }
protected void OnPropertyChanged(PropertyChangedEventArgs&MyIdentity& args) { ... }
protected void OnPropertyChanged(Func&PropertyChangedEventArgs&MyIdentity&& argsFactory) { ... }
于是在基类里触发事件时即可:
this.OnPropertyChanged(() =& new PropertyChangedEventArgs&MyIdentity&(new MyIdentity()));
如果您觉得在没有事件处理器的情况下创建一个委托对象也是一种浪费,那么就自己想办法解决咯。没什么困难的,不应该想不出。
文章写完后很快就有同学回复,说其实更靠谱。我看了看又想了想,的确如此。
事件是个很特别的成员,平时在使用事件的时候,只能将其放在+=或-=的左边,表示为事件添加或移除处理器——除非是在定义事件的类型内部,我们可以将其“赋值”给其他变量,或是当作参数传递,这时候其实操作的就是一个委托对象了。但如果我们是显式声明一个接口内的事件,我们其实是先要将this转化为具体的接口类型才去使用的:
var propertyChanged = ((INotifyPropertyChanged)this).PropertyC
但我们把this转化为具体类型之后,我们实际上是在从“外部”访问接口上定义的成员。换句话说,在这种情况下我们并不处于定义事件的对象内部,我们无法获得这个所谓的“委托”对象,因为此时可能根本不存在这么一个委托对象,我们只知道事件的add和remove访问器。那么,我们又如何让其自动实现呢?此时强制提供add和remove访问器就是顺理成章的事情了。
总体而言,我这系列的第一枪打得有点歪,开了个坏头。当然从好处想,也是通过交流让我,还有潜在不明真相的同学了解到一些细节。还有再次确认了不能迷信权威,这次Eric Lippert的回答的确不够有说服力,但他还是得到了最多的支持,名气这东西的确挺令人嘘唏的。话说我刚才去StackOverflow上对他的回答投了反对票,可能是已经被采纳为正确答案了吧,我反而还被扣了一份,哈哈。
C#的设计缺陷(1):显式实现接口内的事件
Categories:
,登陆后便可删除或修改已发表的评论
(请注意保留评论内容)}

我要回帖

更多关于 问题事件名称appcrash 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信