我只是想知道当变量的值(如int,string等)发生变化时是否可以"触发"某些东西?
假设我有一个TextBox tb显示值的String MyString.所以我想做的是这样的:
MyString.ValueChanged += new EventHandler(UpdateTextBox);
public void UpdateTextBox(object sender, EventArgs e)
{
tb.Text = MyString;
}
Run Code Online (Sandbox Code Playgroud)
为了不必更新多行文本框.有没有办法做到这一点?谢谢 !
今天我注意到我的代码中有一个错误,我以为我是在不久前处理过的.我正在处理Windows Forms应用程序,我form_load经常使用该事件.为了处理Form_load事件中出现错误并抛出异常的情况,我使用以下代码:
catch (Exception ex)
{
LogErrorAndShowMessage(ex, Resources.ERROR_LOAD);
//Otherwise Error : "Cannot call Close() while doing CreateHandle()".
this.BeginInvoke(new InvokeDelegate(CloseTheForm));
LoadForm<Materials>(closeAlreadyOpened : false);
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何声明委托和方法:
public delegate void InvokeDelegate();//used if form load fails
private void CloseTheForm()
{
this.Close();
}
Run Code Online (Sandbox Code Playgroud)
从今天起它运作良好.发生了什么 - 在Form_load我设置DataSource我的ComboBoxes 的事件中,碰巧从SetDataSource方法中抛出了一个错误,最终得到的错误与我在使用之前得到的相同BeginInvoke- Cannot call Close() while doing CreateHandle().
这是一种例外行为,如果从其他地方抛出异常代码仍然正常工作,只有在设置数据源期间我得到了错误.
任何可能导致这种异常行为的建议以及如何解决?
PS
这就是我创建新表单的方式:
protected void LoadForm<T>(ToolStripButton/*ToolStripDropDownButton*/ formButton,
string buttonText,
long? loadEntityId = null,
bool closeAlreadyOpened = …Run Code Online (Sandbox Code Playgroud) 使用泛型DataEventArgs<TData>类,而不是在事件声明中声明和使用自定义EventArgs继承类,违反.Net事件"模式"约定?或者在某些情况下考虑不好的做法?
(命名事件args 的命名约定是使用事件名称并附加后缀"EventArgs".使用DataEventArgs<TData>省略事件名称,尽管它显示了传输的数据类型.)
您可能会争辩说,通用DataEventArgs类对扩展是封闭的,例如添加另一个属性,除非您可以修改用于TData的类.
更长的解释:
在声明包含一些数据的标准委托事件时,我理解标准事件"模式"约定是使用通用的EventHandler委托声明它:
public event EventHandler<SomethingHappendEventArgs> SomethingHappend;
Run Code Online (Sandbox Code Playgroud)
具体SomethingHappendEventArgs是什么声明的东西
public class SomethingHappendEventArgs : EventArgs
{
public SomeDataType Value { get; private set; }
public SomethingHappendEventArgs(SomeDataType data)
{
this.Value = data;
}
}
Run Code Online (Sandbox Code Playgroud)
当谷歌搜索时,我注意到有几个Microsoft命名空间提供了一个通用的DataEventArgs类,(包括Microsoft.Practices.Prism.Events).但是,我无法找到任何推荐或约定指示何时使用它而不是自定义事件数据类,如SomethingHappendEventArgs,反之亦然.
所以,只要有一个数据块,我要在事件数据包括,是否有我应使用自定义的事件数据类,像SomethingHappendEventArgs,而不是宣布这样的事件的任何原因?
public event EventHandler<DataEventArgs<SomeDataType>> SomethingHappend;
Run Code Online (Sandbox Code Playgroud)
泛型DataEventArgs可以声明如下:
public class DataEventArgs<TData> : EventArgs
{
public TData Value { get; private set; }
public DataEventArgs(TData value)
{
this.Value = value;
}
}
Run Code Online (Sandbox Code Playgroud) 我想在webbrowser对象中单击事件按钮.
单击按钮我想伸出并编写代码?例如,在站点弹出窗口中的webbrowser对象上单击登录按钮以捕获事件并想编写代码?
我用谷歌翻译,对不起有什么不对:)
我遇到了这种情况:"如果我选择一个单选按钮并选中一个特定的复选框,那么单选按钮的文本应该被复制到一个文本框中".
public void radiobutton_CheckedChanged(object sender, EventArgs e)
{
object s;
s = radiobutton.Text;
checkBox2_CheckedChanged(s,e);
}
private void checkBox2_CheckedChanged(object sender,EventArgs e)
{
if (checkBox2.Checked == true)
{
textBox.Text = Convert.ToString(sender);
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试了这段代码,但它没有用.什么可能导致它无法正常运作?
我有一个类的集合,我想添加到集合属性更改事件函数.
当我尝试使用LINQ使用此代码执行此操作时:
(from s in StreetsVI select s.PropertyChanged +=
new PropertyChangedEventHandler(Messege)).ToList();
Run Code Online (Sandbox Code Playgroud)
我收到错误:
The type of the expression in the select clause is incorrect. Type inference failed in the call to 'Select'.
Run Code Online (Sandbox Code Playgroud) 我试图避开jQuery并想要检测是否按下了左键或右键.我正在努力解决这个问题.
var keyPress = function(event) {
var keyCode = event.keyCode;
if (keyCode == 37)
//do something
if (keyCode == 39)
//do something
}
document.onkeydown = keyPress(event);
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我无法检测到任何键盘事件.
任何帮助将不胜感激.
我有一个工作表单应用程序,上面有一个按钮.我也有源代码.所以现在我正在尝试从Windows上的计划任务运行应用程序,我想在应用程序运行时将代码更改为单击按钮操作.问题是应首先加载表单,然后触发单击操作.我需要一个计时器吗?如果有的话,请你帮个忙吗?因此加载表单应用程序大约需要3-4秒.所以它应该在5秒后触发点击动作
我真的很想在winforms中使用C#中的事件处理程序,目前我有以下错误:
错误1"DotFlickScreenCapture.ScreenCapture"类型不能用作泛型类型或方法"System.EventHandler"中的类型参数"TEventArgs".没有从'DotFlickScreenCapture.ScreenCapture'到'System.EventArgs'的隐式引用转换.
我试图找到一种方法来击败这个错误,但到目前为止,我的谷歌搜索没有发现任何东西.
此错误指向的行是这一行:
public EventHandler<ScreenCapture> capture;
Run Code Online (Sandbox Code Playgroud)
从我所知,这堂课:
public class ScreenCapture
{
public delegate void StatusUpdateHandler(object sender, ProgressEventArgs e);
public event StatusUpdateHandler OnUpdateStatus;
public bool saveToClipboard = true;
public void CaptureImage(bool showCursor, Size curSize, Point curPos, Point SourcePoint, Point DestinationPoint, Rectangle SelectionRectangle, string FilePath, string extension)
{
Bitmap bitmap = new Bitmap(SelectionRectangle.Width, SelectionRectangle.Height);
using (Graphics g = Graphics.FromImage(bitmap))
{
g.CopyFromScreen(SourcePoint, DestinationPoint, SelectionRectangle.Size);
if (showCursor)
{
Rectangle cursorBounds = new Rectangle(curPos, curSize);
Cursors.Default.Draw(g, cursorBounds);
}
}
if (saveToClipboard)
{
Image img …Run Code Online (Sandbox Code Playgroud) 我正在为朋友制作一个页面,并且我有一个隐藏的文本字段,当用户键入文本时,将其转换为div,使其看起来像是在屏幕上而不是在输入字段中键入.
以下是该页面的链接:http://merkd.com/godis.php
这是我用来响应击键的函数:
$('#hiddenInput').keydown(function() {
var input = $('#hiddenInput').val();
var html = '<div style="float: left;">'+input+'</div><div id="cursor">|</div>';
$('#typingArea').html(html);
});
Run Code Online (Sandbox Code Playgroud)
文本字段现在可见,以便您可以看到问题.输入或删除文本时,直到下一次按键才会响应.因此,如果我输入一个字母,在输入下一个字母之前不会显示任何内容.
我查看了jQuery .on()文档,但我找不到任何相关内容.任何帮助深表感谢.
PS我知道它应该是一个单独的问题,但是有一种简单的方法可以使文本字段始终处于焦点状态吗?我想这样做,无论用户点击的位置或其他什么,如果他们键入,文本仍将显示.
event-handling ×10
c# ×7
winforms ×3
events ×2
javascript ×2
.net ×1
browser ×1
button ×1
checkbox ×1
click ×1
generics ×1
jquery ×1
linq ×1
radio-button ×1
updates ×1