我正在开发一个MDI Windows Forms
应用程序.我的父表单有ToolStrip
菜单和一些ToolStripDropDownButtons
.我想根据用户的权限更改或具有的某些(子按钮)的Visible
属性.ToolStripDropDownButton
ToolStripItems
以下是我编写的用于管理此方法的方法的一部分:
private void SetToolStripDropDownVisibility(ToolStripDropDownButton mainBtn, params ToolStripItem[] item)
{
mainBtn.Visible = false;
foreach (ToolStripItem tempItem in item)
{
tempItem.Visible = true;
}
}
Run Code Online (Sandbox Code Playgroud)
我作为第一个参数ToolStripDropDownButton
和所有其他"子按钮"作为参数列表传递.然而,当我进入调试模式在部分foreach (ToolStripItem tempItem in item)
的tempItem
Visible属性被标记为假.但是在设计器中,此属性设置为true.你可以看到我甚至尝试明确地将值更改为true - tempItem.Visible = true;
但似乎这条线无效.Visible
遗骸false
和我的价值无法改变它.
这只是该方法的开始,我想不出其他可能搞乱这些ToolStrip
项目的代码.我试图将值更改mainBtn.Visible
为true或false,认为可能存在任何连接,但似乎这不是问题.所以任何想法为什么会这样,为什么我不能改变Visible
价值,当然还有任何方式去做.
我有一个ToolStrip
多个ToolStripDropDownButton
s,每个都有一套DropDownItems
.
当用户单击DropDownItem时,将显示复选标记.
默认情况下,可以单击多个项目,因此会出现多个复选标记.
我要做的是当用户点击一个DropDownItem时,应该取消选中其他已检查的项目.换句话说,DropDown列表中应始终只有一个已检查项.
我已经讨论了一段时间,但我无法弄清楚如何保留当前检查的项目,同时取消选中其他项目.
下面是我现在的代码.
private void subietm1ToolStripMenuItem_Click(object sender, EventArgs e)
{
UncheckOtherToolStripMenuItems(sender);
}
public void UncheckOtherToolStripMenuItems(object selectedMenuItem)
{
List<ToolStripDropDownButton> dropdownButtons = new List<ToolStripDropDownButton>();
foreach (ToolStripItem item in toolStrip1.Items)
{
if (item is ToolStripDropDownButton)
{
dropdownButtons.Add((ToolStripDropDownButton)item);
}
}
foreach (ToolStripDropDownButton btn in dropdownButtons)
{
foreach (ToolStripMenuItem d in btn.DropDownItems)
{
if (d.Checked)
d.CheckState = CheckState.Unchecked;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果有人能够对此有所了解,或者告诉我一个简单的方法,我将不胜感激.
谢谢.
我通过以下方式动态地将字符串(项)添加到ToolStripItemCollection:
Dim onClickHandler As System.EventHandler = New System.EventHandler(AddressOf Symbol_Click)
Dim item As New ToolStripMenuItem(newSymbol, Nothing, onClickHandler)
SomeToolStripMenuItem.DropDownItems.Add(item)
Run Code Online (Sandbox Code Playgroud)
因此,这些项目不会一次性添加,而是在整个程序会话中基于外部触发器逐个添加.我想在每次添加新项目时对下拉列表进行排序.我有什么选择来实现这一目标?
在参考这些相关 问题时,我已经在VS2010中设置了CSS3验证一段时间.
但是,每次关闭CSS文件时,css工具条中的"用于验证的级联样式表"下拉列表将从CSS 3.0更改为CSS 2.1.重新打开css文件时,我需要重新选择CSS 3.0以避免验证错误.
有没有办法改变默认值?即使是注册表黑客在这一点上也是可以接受的,这真的很烦人.
在编辑cshtml文件时,更改默认值还有另一个好处.如果未打开CSS文件,验证目标下拉列表将显示为灰色.因此要将其更改为3.0,您必须打开一个CSS文件.另一个烦恼.
我检查了工具>选项>文本编辑器> CSS,但没有像HTML那样的验证选项卡.
validation default-value visual-studio-2010 css3 toolstripdropdown
我有一个应用程序,主要是通过 NotifyIcon 的 ContextMenuStrip 操作的
,ToolStripMenuItems 有多个级别,用户可以通过它们。
问题是,当用户有两个屏幕时,如果没有可用空间,MenuItems 会跳转到第二个屏幕。像这样:
我怎样才能强迫他们留在同一个屏幕上?我试图通过网络搜索,但找不到合适的答案。
这是我用来测试这个 senario 的一段示例代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var resources = new ComponentResourceManager(typeof(Form1));
var notifyIcon1 = new NotifyIcon(components);
var contextMenuStrip1 = new ContextMenuStrip(components);
var level1ToolStripMenuItem = new ToolStripMenuItem("level 1 drop down");
var level2ToolStripMenuItem = new ToolStripMenuItem("level 2 drop down");
var level3ToolStripMenuItem = new ToolStripMenuItem("level 3 drop down");
notifyIcon1.ContextMenuStrip = contextMenuStrip1;
notifyIcon1.Icon = ((Icon)(resources.GetObject("notifyIcon1.Icon")));
notifyIcon1.Visible = true;
level2ToolStripMenuItem.DropDownItems.Add(level3ToolStripMenuItem);
level1ToolStripMenuItem.DropDownItems.Add(level2ToolStripMenuItem);
contextMenuStrip1.Items.Add(level1ToolStripMenuItem);
}
}
Run Code Online (Sandbox Code Playgroud) 我试图理解如果你使用这个构造函数,我必须做什么来覆盖ToolStripDropDown
控件的行为System.Windows.Forms
:
var button = new ToolStripSplitButton("text","path to image", clickEventHandler)
Run Code Online (Sandbox Code Playgroud)
然后下拉只显示我是否按下鼠标,如果我使用另一个
var button = new ToolStripSplitButton("text","path to image")
Run Code Online (Sandbox Code Playgroud)
然后我点击时会显示下拉菜单.
我很清楚,提供一个单击事件处理程序是非常明确的说"嘿,当我点击,执行它"但是ToolStripSplitButton
由于控件本身的分裂性质,区别模糊了一点.
所以,我喜欢做的是a)当用户点击按钮部分时ToolStripSplitButton
,click事件处理程序正常执行b)当我单击或按鼠标按箭头部分时,ToolStripSplitButton
下拉显示
是否有任何OOB属性/方法可以做到这一点?
谢谢
我已在Windows窗体中使用toolstripdropdown在单击另一个按钮时显示按钮列表。
var td = new ToolStripDropDown
{
AutoSize = true,
DropShadowEnabled = false,
BackColor = Color.Transparent,
Margin = Padding.Empty,
Padding = Padding.Empty
};
var host = new ToolStripControlHost(panel)
{
BackColor = Color.Transparent,
Margin = Padding.Empty,
Padding = Padding.Empty
};
td.Items.Add(host);
Run Code Online (Sandbox Code Playgroud)
该面板包含要显示的按钮列表。要向用户显示面板,请在按钮(显示)上单击以下行。
td.Show(pointonScreen);
Run Code Online (Sandbox Code Playgroud)
默认情况下,AutoClose
设置为true。因此,每当用户单击表单中的任何位置时,toolstripdropdown都会关闭。还行吧。
我的要求:
td.Visible
现在发生的是,在步骤3上,在引发按钮单击事件之前,toolstripdropdown已关闭。因此,再次显示了下拉列表。
还有其他方法可以满足我的要求吗?
ToolStripDropDownButton
当打开下拉菜单时,我需要更改a的背景颜色.我该怎么做?
我尝试从中继承一个类ToolStripProfessionalRenderer
然后覆盖它OnRenderDropDownButtonBackground
,但它只影响下拉菜单何时关闭.
我有一个ToolStripDropDownButton
子项CheckOnClick
启用的地方.
我想给用户关闭下拉前挑选多个项目的能力,但我找不到这样做没有设置的方式AutoClose
来false
和这样做了另外一个问题,这是怎么关闭它,当用户单击控件外的任何位置(即应该关闭它的时间).
我已经看到类似的问题如何关闭设置为autoclose = false的toolstripmenuitem?但是Click
在每个组件上放置事件处理程序的建议并不完全是我所追求的.无论是通过鼠标还是键盘控制,都应该失去焦点.
我查看了Leave
但是当ToolStrips本身有那个事件时,显然ToolStripDropDownButton没有.
最好的方法是什么?
我是 WPF 技术的新手。我已经在 WinForms 中开发了大约 6 年。
现在我想通过学习 WPF 在我的技能上迈出一大步。我正在阅读 MSDN 中的介绍指南,而作为个人练习,我正在尝试将 WinForms UI 的结构转换为其等效的 WPF UI。
这是我想在 WPF 中重现的 WinForms 控件结构的简单模型:
我的问题是试图重现ToolStripDropDownButton控件的等效控件/行为。
在Windows Forms Controls and Equivalent WPF Controls 一文中,Microsoft 只是说ToolStripDropDownButton的等效控件是ToolBar ...具有组合。我完全不明白“有组合”是什么意思。我一直在阅读和试验Toolbar,但我没有找到在工具栏中添加下拉按钮的方法。
我的问题:有人可以指导我或向我展示如何在工具栏中添加下拉按钮的简短示例?
winforms ×8
c# ×6
.net ×4
toolstrip ×3
checked ×1
contextmenu ×1
css3 ×1
notifyicon ×1
validation ×1
vb.net ×1
wpf ×1