我不懂TextCompositionEventArgs类.
有一些名为ControlText,SystemText,Text的字符串成员.然后有一个字段TextConmposistion,它本身又包含成员ControlText,SystemText和Text以及SystemCompositionText和CompositionText字段.
public class TextCompositionEventArgs : InputEventArgs
{
..
public string ControlText { get; }
public string SystemText { get; }
public string Text { get; }
public TextComposition TextComposition { get; }
}
public class TextComposition : DispatcherObject
{
..
public string CompositionText { get; protected set; }
public string ControlText { get; protected set; }
public string SystemCompositionText { get; protected set; }
public string SystemText { get; protected set; }
public string Text { get; protected set; …Run Code Online (Sandbox Code Playgroud) 这是我的工作班:
public class Job
{
public string Id{ get; set;}
public string Name{ get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这是我的ListView:
public class JobListePage:ContentPage
{
// Members
private ListView lstView;
// Constructor
public JobListePage ()
{
// Set members
lstView = new ListView ();
// Create job objects
Job[] jobs = {new Job(){Id="1", Name="Benny"}, new Job(){Id="2", Name="Lukas"}};
// Fill listview with job objects
lstView.ItemsSource = jobs;
// HOW CAN I PASS THE TAPPED OBJECT HERE???
lstView.ItemTapped += async (o, e) => {
await DisplayAlert("Tapped", …Run Code Online (Sandbox Code Playgroud) 例如,我有一个基本事件发布方法:
protected virtual OnSomeEvent(EventArgs e)
{
var handler = SomeEvent;
if (handler != null)
{
handler(this, e);
// handler(this, new EventArgs());// EDIT: Yes it should be
// handler(this, e),
// ignore this one :D
}
}
Run Code Online (Sandbox Code Playgroud)
对于派生类,OnSomeEvent它在触发时覆盖并引发其他事件:
protected override OnSomeEvent(EventArgs e)
{
base.OnSomeEvent(e);
if (ExtendedEvent != null)
{
OnExtendedEvent(e);
}
}
protected void OnExtendedEvent(EventArgs e)
{
// some stuff done
// new information the ExtendedEventArgs object needs
// is not available until this point
ExtendedEvent(this, new ExtendedEventArgs(someStuff, someOtherStuff)); …Run Code Online (Sandbox Code Playgroud) 经典的一般C#事件具有以下参数:
(object sender, EventArgs e)
Run Code Online (Sandbox Code Playgroud)
我可以为e参数实现一个具有更具体签名的事件,派生EventArgs.
现在,基类的目的是什么EventArgs?我的意思是......它是空的.没有基础/抽象/虚拟属性,也没有字段或其他内容.
为什么基本事件的参数不像下面那样?
(object sender, object eventArgs)
Run Code Online (Sandbox Code Playgroud)
也就是说,为什么所有带有一些已实现和特定的event-args参数的事件都是EventArgs从一个简单的派生而不是从一个简单派生出来的object?
上述问题与以下问题相对应.通用表单中的事件委托是:
delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
Run Code Online (Sandbox Code Playgroud)
并且对参数没有限制e.但是我会期待类似的东西where TEventArgs : EventArgs,一致......
我只是偶然发现(编译时我认为不会编译的东西)EventHandler 并不局限于System.EventArgs类型.
这是内联文档:
#region Assembly mscorlib.dll, v4.0.0.0
// C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\mscorlib.dll
#endregion
namespace System
{
// Summary:
// Represents the method that will handle an event.
//
// Parameters:
// sender:
// The source of the event.
//
// e:
// An System.EventArgs that contains the event data.
//
// Type parameters:
// TEventArgs:
// The type of the event data generated by the event.
[Serializable]
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
}
Run Code Online (Sandbox Code Playgroud)
这是文档和实现之间的不匹配吗?
我问,因为我很好奇.这根本不是抱怨.
我希望这个名字能够证明我的问题...所以,我刚刚开始制作一个记忆游戏,并且有25个复选框按钮用于显示项目.
我想知道是否有一种方法可以告诉EventArgs或Object,如果每个按钮使用相同的事件处理程序,它会从哪个按钮发出.
private void checkBox_CheckedChanged(object sender, EventArgs e)
{
checkBox = Code which will determine what checkBox sent it.
if (checkBox.Checked)
{ Box.ChangeState(checkBox, true); }
else { Box.ChangeState(checkBox, false);}
}
Run Code Online (Sandbox Code Playgroud) 在所有.NET书中,我已经阅读了实现事件的指南,解释了您需要子类化EventArgs并使用EventHandler.我在http://msdn.microsoft.com/en-us/library/ms229011.aspx上查找了更多信息,它说"请使用System.EventHandler而不是手动创建新的委托以用作事件处理程序." 我知道使用EventArgs有很重要的理由,但我的问题不是"我应该这样做吗?",而是"我可以这样做吗?".
有什么理由不能使用通用委托代替EventHandler我的事件吗?例如,如果我想要一个强类型的发送者(其他人对此感到恼火object sender?).
为了解释我的意思更好,有什么理由以下不起作用?
public class IoC
{
public AbstractFactory GetAbstractFactory()
{
var factory = new AbstractFactory();
factory.CreateObject += ()=>new object();
return factory;
}
}
public class AbstractFactory
{
public event Func<object> CreateObject;
private object OnObjectCreated()
{
if(CreateObject == null)
{
throw new Exception("Not injected.");
}
return CreateObject();
}
private object _injectedObject;
public object InjectedObject
{
get
{
if(_injectedObject == null)
{
_injectedObject = OnObjectCreated();
}
return _injectedObject;
}
}
}
Run Code Online (Sandbox Code Playgroud) 我有asp按钮:
<asp:button ID="btn1" runat="server" CommandArgument="" CssClass="btn1" OnClick="button_click"></asp:button>
Run Code Online (Sandbox Code Playgroud)
和脚本:
$("a").click(function () {
var val = $(this).attr('id').toString();
$('.btn1').attr('CommandArgument',val);
alert($('.btn1').attr('CommandArgument').toString());
$('.btn1').click();
});
Run Code Online (Sandbox Code Playgroud)
点击后它会提醒我命令参数.但是在下一步 - 当我触发btn1点击jquery时,它转到codebehind并且命令参数为空.我可以用jquery以某种方式传递命令参数吗?
我试图将值保存到全局变量但是在回发后它们都是空的.我不想使用cookies或viewstate.
谢谢!
我试图了解 EventHandler 并且必须使用通知项目。这是项目的链接: https ://codeload.github.com/mike-eason/WPF_ToastNotifications/zip/master
我所做的只是将 .Net-framework 从 4.5 更改为 4
我遇到了这个错误:
我的类不能用作泛型类型或方法“System.EventHandler”中的类型参数“TEventArgs”
ToastNotification类:
[TemplatePart(Name = "PART_DismissButton", Type = typeof(Button))]
public class ToastNotification : ContentControl
{
public event EventHandler Dismissed;
public string Title
{
get { return (string)GetValue(TitleProperty); }
set { SetValue(TitleProperty, value); }
}
public static readonly DependencyProperty TitleProperty =
DependencyProperty.Register("Title", typeof(string), typeof(ToastNotification));
public string Message
{
get { return (string)GetValue(MessageProperty); }
set { SetValue(MessageProperty, value); }
}
public static readonly DependencyProperty MessageProperty =
DependencyProperty.Register("Message", typeof(string), typeof(ToastNotification));
public …Run Code Online (Sandbox Code Playgroud) 我正在处理的项目要求我能够在每次将项目添加到列表时触发事件.为此,我创建了一个继承自List的自定义List类,并添加了一个OnAdd事件.我还想返回作为EventArgs添加的项目,我为其添加了一些代码(如下所示):
public class ClientListObservable<Client>:List<Client>
{
public event EventHandler<EventArgs<Client>> OnAdd;
public void Add(Client item)
{
if (null != OnAdd)
{
OnAdd(this, new EventArgs<Client>(item));
}
base.Add(item);
}
}
public class EventArgs<Client> : EventArgs
{
public EventArgs(Client value)
{
m_value = value;
}
private Client m_value;
public Client Value
{
get { return m_value; }
}
}
Run Code Online (Sandbox Code Playgroud)
这是我添加处理程序的方式
clientList.OnAdd += new EventHandler<EventArgs<Client>>(clientList_OnAdd);
Run Code Online (Sandbox Code Playgroud)
但是,在OnAdd方法中:
private void clientList_OnAdd(object sender, EventArgs e)
{
//want to be able to access the data members of the Client object …Run Code Online (Sandbox Code Playgroud)