如果您想覆盖默认的复制/粘贴行为(请参阅Clipboard event C#和Detect & Differentiate Clipboard Events (Cut,Copy and Paste)),您似乎需要使用比C#优惠级别更低的级别。然而,也许你可以把自己的逻辑放在一个知道如何引导行动请求(如“复制”)的“警卫”之后,然后将其重定向为approprite。
下面是一个简单类:
namespace Your.App
{
public class GuardedCommand
{
public bool CurrentlyEditing { get; set; }
public GuardedCommand()
{
CurrentlyEditing = false;
}
public void DoCopy()
{
if(CurrentlyEditing)
StandardCopyCommand();
else
ShortcutCopyCommand();
}
void ShortcutCopyCommand() { /*menu work here (or delegate to another class)*/ }
void StandardCopyCommand() { /*"normal" work here (or delegate again)*/ }
}
}
要使用你会创建类,然后将它guardedCommand.CurrentlyEditing
财产作为BeforeLabelEdit
和AfterLabelEdit
事件为宜。然后,无论您是否抓住CTRL + C快捷键,只需调用guardedCommand.DoCopy()
即可完成其余操作。
如果您正在寻找关于您想要做什么的模式,请查看State Pattern,该代码是上述代码的一种实现。要成为一个真正的国家(或战略)模式,它需要具有实现DoCopy()
和DoPaste()
的独立具体类,而不仅仅是使用if/else或switch。然后,当CurrentlyEditing
正在改变时,适当的具体实现将被设置为用于处理DoCopy()
方法的当前类。
而且只是因为我花了更长的时间来写这一段比它本来只给你一些代码,这里的一些代码:
namespace Your.App
{
//correct implementation of the State Pattern
interface IClipboard
{
void Copy();
void Paste();
}
class MyCustomClipboard : IClipboard
{
public void Copy() { /*your special code*/ }
public void Paste() { /*your code again*/ }
}
class DefaultClipboard : IClipboard
{
public void Copy() { /*default code*/ }
public void Paste() { /*default code again*/ }
}
public class StateClass
{
IClipboard State { get; set; }
public StateClass()
{
CurrentlyEditing = false;
}
bool _currentlyEditing;
public bool CurrentlyEditing
{
get { return _currentlyEditing; }
set
{
_currentlyEditing = value;
if(_currentlyEditing)
State = new DefaultClipboard();
else
State = new MyCustomClipboard();
}
}
public void Copy()
{
State.Copy();
}
public void Paste()
{
State.Paste();
}
}
}
正如你所看到的,这可能是一个有点矫枉过正时,有只有两个州(并且州的数量可能不会增加)。
ovveriding复制粘贴声音对我来说是一个坏主意。我习惯于“复制/粘贴”它始终在所有应用程序上都一样。你的应用只会让我困惑。 但如果你坚持,为什么不检查重点?如果焦点位于文本框上,请执行一个副本粘贴,如果不是,请执行另一个操作。 – Nahum
我们的自定义复制/粘贴行为仅处理在未编辑文本时复制和粘贴行。编辑文本时,我想要默认的复制/粘贴行为。 –
清除菜单的快捷键是最简单的方法。其他替代品将是'更脏'。 –