- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经成功地创建了带有用户控件的 DragDrop 功能。现在,我正在尝试在某些组件(例如 ToolStripButton)上启用 DragDrop 功能。
基类 ToolStripItem 支持 AllowDrop 和 DragEnter/DragDrop 事件...
ToolStripButton 在设计器中隐藏了这些属性,但它们可以公开访问。
最初我尝试为每个 ToolStripButton 执行以下操作:
button.AllowDrop = true;
button.DragEnter += new DragEventHandler(button_DragEnter);
button.DragDrop += new DragEventHandler(button_DragDrop);
但是,事件从未触发。这些按钮包含在 MenuStrip 中,因此我将 MenuStrip.AllowDrop 更改为 true。然后我开始获取 DragEnter 和 DragDrop 事件,但是在访问 ToolStripItem 的 Tag 属性时,由于线程/调用问题,DragDrop 事件将失败。
无法调用 ToolStripItems。所以我尝试用相同的功能调用他们的容器 MenuStrip。我仍然遇到线程/调用问题,在我尝试访问 ToolStripItem 时线程停止运行。
这是我在调用后用来检索标签信息的代码:
void button_DragDrop(object sender, DragEventArgs e)
{
menuStrip.Invoke(new DragEventHandler(MyDragFunction), new object[] { sender, e });
}
void MyDragFunction(object sender, DragEventArgs e)
{
int id = (int)((ToolStripButton)sender).Tag;
// Debugging never reaches this line
int dragId = (int)e.Data.GetData(DataFormatName, false);
MoveItem(id, dragId);
}
拖放至像 ToolStripItem 这样的组件是不可能的吗?还是我做错了什么?
最佳答案
这是我为我工作的代码。
我在表单构造函数中分配 DragDrop 属性,因为它们隐藏在设计器中。
foreach (object o in menuStrip.Items)
{
if (o is ToolStripButton)
{
ToolStripItem item = (ToolStripItem)o;
item.AllowDrop = true;
item.DragEnter += new DragEventHandler(item_DragEnter);
item.DragOver += new DragEventHandler(item_DragOver);
item.DragDrop += new DragEventHandler(item_DragDrop);
}
}
private void item_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormatName, false))
{
e.Effect = DragDropEffects.Move;
}
}
private void item_DragOver(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormatName, false))
{
e.Effect = DragDropEffects.Move;
}
}
private void item_DragDrop(object sender, DragEventArgs e)
{
int id = (int)e.Data.GetData(DataFormatName, false);
int category = Convert.ToInt32((sender as ToolStripButton).Tag);
MyFunction(category, id);
}
关于c# - AllowDrop 属性不适用于 ToolStripItems,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8143882/
我需要将一组自定义 ToolStripItem(包含附加属性 formReference)添加到 ToolStripPanel 但它们不会出现一些原因。 添加项目的代码: foreach (Form
我已经成功地创建了带有用户控件的 DragDrop 功能。现在,我正在尝试在某些组件(例如 ToolStripButton)上启用 DragDrop 功能。 基类 ToolStripItem 支持 A
我通过以下方式将字符串(项目)动态添加到 ToolStripItemCollection: Dim onClickHandler As System.EventHandler = New System
当您将鼠标悬停在 ToolStripItems 上时,即使它们所在的窗体不在焦点上,ToolStripItems 也会显示事件突出显示。但是,除非表单获得焦点,否则它们不会显示工具提示。我看过 Too
我需要保存和恢复表单上特定控件的设置。 我遍历所有控件并返回名称与我想要的控件匹配的控件,如下所示: private static Control GetControlByName(string na
我有一个 DGV 的上下文菜单条。它有一个名为“ChangeTo”的 toolstripitem,它分支成一组根据使用的配置文件动态创建的项目。当我运行具有 Rt-Click -> Change To
当我查找它时,他们将其列为具有 .Checked 属性。但在 Visual Studio 和 msdn 上, 它没有列出 Checked 属性的任何子项。 ContextMenuStrip menu
我正在开发一个 MDI Windows Forms 应用程序。我的父窗体有 ToolStrip 菜单和一些 ToolStripDropDownButtons。我想根据用户。 这是我为管理此问题而编写的
在 Windows 窗体中 - 如果 MenuStrip 的下拉项有工具提示和下拉项本身,则工具提示将有大约 50% 的机会显示在 ToolStripItems 下方。 解决方法是什么? 要重现,您可
我想以编程方式用项目填充 ToolStrip。 toolStrip1.LayoutStyle 必须是 ToolStripLayoutStyle.Table。但是我无法更改项目的宽度,即使我这样做了,宽
我是一名优秀的程序员,十分优秀!