RichTextBox阻止DragDrop事件

问题描述 投票:1回答:2

我在DragDrop上有DragEnterSplitContainer.Panel事件:

    splitContainer.Panel.DragDrop += new System.Windows.Forms.DragEventHandler(this.splitContainerPanelDragDrop);
    splitContainer.Panel.DragEnter += new System.Windows.Forms.DragEventHandler(this.splitContainerPanelDragEnter);

SplitContainer.Panel控件外,它在RichTextBox内的每个控件都很完美。

看起来像:enter image description here

所以DragDrop / DragEnter在SplitContainer内的每个控件中都能完美地工作,除了标记为黄色的控件。

我尝试了什么:

1套

RichTextBox.AllowDrop = false;

所以我甚至DragEnter都没有“不允许动作”光标。

2)设置

 RichTextBox.AllowDrop = true;

在这个光标没问题之后,但它不起作用,因为在其他情况下需要额外的qazxsw poi它不起作用。

3)设置

DragEventHandler

与2)变体相同的结果。

我不想为SplitContainer中的每个qazxsw poi设置qazxsw poi / qazxsw poi事件,因为在RichTextBox.EnableAutoDragDrop=false; RichTextBox.AllowDrop=true; 中它们是动态创建的。

问题是:在C#中有没有像DragDrop analog这样的方法?或者我可以做什么,除了为每个DragEnter设置事件以使其工作?

c# winforms richtextbox
2个回答
1
投票

这对我有用,我创建了2个自定义控件

自定义SplitControl

RichTextBox

自定义RichTextBox

FlowLayoutPanel

如果有效,请告诉我


0
投票

我不知道你怎么能直接做这个工作。但是,由于您已经愿意在生成控件时添加几行代码,为什么不通过几行Lambda添加必要的事件..:

让我们假设您刚刚创建了一个e.PreventDefault并准备将其添加到某些RichTextBox集合中..:

public partial class SplitControlCustom : SplitContainer
    {
        public SplitControlCustom()
        {
            InitializeComponent();
        }

        public void ForceDrageDrop(DragEventArgs eventArgs)
        {
            OnDragDrop(eventArgs);
        }

        public void ForceDragEnter(DragEventArgs eventArgs)
        {
            OnDragEnter(eventArgs);
        }
    }

前两个lambdas设置效果没有任何检查复制;当然你会想要添加那些并选择适当的效果。

第三个lambda通过包含面板的public partial class RichTextBoxCustom : RichTextBox { public RichTextBoxCustom() { InitializeComponent(); this.AllowDrop = true; } protected override void OnDragEnter(DragEventArgs drgevent) { SplitControlCustom parentSplitControl = Parent.Parent as SplitControlCustom; if (parentSplitControl != null) { parentSplitControl.ForceDragEnter(drgevent); } } protected override void OnDragDrop(DragEventArgs drgevent) { SplitControlCustom parentSplitControl = Parent.Parent as SplitControlCustom; if (parentSplitControl != null) { parentSplitControl.ForceDrageDrop(drgevent); } } } 事件的RichTextBox,所以现在RTB实际上是'D&D-through'..

© www.soinside.com 2019 - 2024. All rights reserved.