gpt4 book ai didi

c# - 通过双击右键防止编辑 NSTextField

转载 作者:太空宇宙 更新时间:2023-11-03 13:36:53 27 4
gpt4 key购买 nike

我正在使用 MonoMac/C# 并有一个 NSOutlineView,其中一些项目是可编辑的。因此,如果您选择一个项目然后再次单击它(缓慢双击),则该行的 NSTextField 将进入编辑模式。我的问题是,即使您右键单击该项目,也会发生这种情况。您甚至可以混合左键单击和右键单击以进入编辑模式。

这很烦人,因为有时您会选择一行然后右键单击它,然后在上下文菜单出现一秒钟后,该行进入编辑模式。

有没有办法限制其中的 NSOutlineView 或 NSTextFields,使其只能使用鼠标左键进入编辑模式(除了在选中行时按 Enter 之外)?

谢谢!

最佳答案

我使用的方法是覆盖“RightMouseDown”方法 [1、2]。在尝试在 NSOutlineView 和 NSTableCellView 中这样做但没有成功之后,诀窍是向下到层次结构中的较低级别到 NSTextField。事实证明,NSWindow 对象使用 SendEvent 将事件直接分派(dispatch)到距离鼠标事件最近的 View [3],因此事件从最内层 View 进行到最外层 View 。

您可以在 Xcode 的 OutlineView 中更改所需的 NSTextField 以使用此自定义类:

public partial class CustomTextField : NSTextField
{
#region Constructors

// Called when created from unmanaged code
public CustomTextField (IntPtr handle) : base (handle)
{
Initialize ();
}
// Called when created directly from a XIB file
[Export ("initWithCoder:")]
public CustomTextField (NSCoder coder) : base (coder)
{
Initialize ();
}
// Shared initialization code
void Initialize ()
{
}

#endregion

public override void RightMouseDown (NSEvent theEvent)
{
NextResponder.RightMouseDown (theEvent);
}
}

因为“RightMouseDown”调用base.RightMouseDown(),所以点击被 NSTextField 逻辑完全忽略。调用 NextResponder.RightMouseDown() 允许事件向上渗透到 View 层次结构中,以便它仍然可以触发上下文菜单。

[1] https://developer.apple.com/library/mac/documentation/cocoa/Reference/ApplicationKit/Classes/NSView_Class/Reference/NSView.html#//apple_ref/occ/instm/NSView/rightMouseDown :[2] https://developer.apple.com/library/mac/documentation/cocoa/conceptual/eventoverview/HandlingMouseEvents/HandlingMouseEvents.html[3] https://developer.apple.com/library/mac/documentation/cocoa/conceptual/eventoverview/EventArchitecture/EventArchitecture.html#//apple_ref/doc/uid/10000060i-CH3-SW21

关于c# - 通过双击右键防止编辑 NSTextField,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405170/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com