我在DragDrop
上有DragEnter
和SplitContainer.Panel
事件:
splitContainer.Panel.DragDrop += new System.Windows.Forms.DragEventHandler(this.splitContainerPanelDragDrop);
splitContainer.Panel.DragEnter += new System.Windows.Forms.DragEventHandler(this.splitContainerPanelDragEnter);
除SplitContainer.Panel
控件外,它在RichTextBox
内的每个控件都很完美。
所以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
设置事件以使其工作?
这对我有用,我创建了2个自定义控件
自定义SplitControl
RichTextBox
自定义RichTextBox
FlowLayoutPanel
如果有效,请告诉我
我不知道你怎么能直接做这个工作。但是,由于您已经愿意在生成控件时添加几行代码,为什么不通过几行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'..