我倾向于在我的大多数应用程序的底部使用StatusStrip进行简单的状态更新,偶尔也会使用进度条.
但是,看起来ToolStripStatusLabels不会从控件继承,因此它们没有.Invoke或.InvokeRequired.那么我如何线程安全地调用来改变它的文本属性呢?
后代和其他搜索的代码答案:
Action<string> test=(text) =>
{
if (this._statusStrip.InvokeRequired) this._statusStrip.Invoke(
new MethodInvoker(() => this._lblStatus.Text = text));
else this._lblStatus.Text = text;
};
Run Code Online (Sandbox Code Playgroud)
要么
private void TestInvoker(string text)
{
if (this._statusStrip.InvokeRequired)
this._statusStrip.Invoke(
new MethodInvoker(() => this._lblStatus.Text = text));
else this._lblStatus.Text = text;
}
Run Code Online (Sandbox Code Playgroud) 这是显示问题的图片.看看右下角.
谁知道如何摆脱它?
设置LayoutStyle
以VerticalStackWithOverflow
修复它,但也将项目水平居中,这是我不想要的.
我只想要像照片中的垂直堆栈,但右下角没有黑色线条.
我从来没有完全理解这个属性的设计目的.我可以看到它明显改变了工具条的设计,我发现在Windows XP上将它设置为System使其更适合WinForms风格.
这里有更深层的含义吗?控件的呈现方式是否会发生变化以及您建议使用哪种模式?
谢谢.
我有一个状态栏的表单,其中有2 ToolStripStatusLabel
秒后跟一个ToolStripProgressBar
.我希望进度条始终锚定在状态栏的右侧 - 所以当窗口调整大小/最大化时,它应该自动移动 /重绘.
我认为这就像将1st(左对齐)ToolStripStatusLabel
的Spring
属性设置为true 一样简单,因此当窗体调整大小/增加大小,并且有更多可用空间时,1st ToolStripStatusLabel
会填满该空间并自动推送ToolStripProgressBar
在右边.
但这不仅没有做我想要的 - 第一个ToolStripStatusLabel
实际上覆盖了第二个StatusLabel
和ProgressBar
基本占据整个状态栏.ToolStrip控件都没有Anchor甚至MinSize.
那我怎么做:
ToolStripProgressBar
StatusBar的右侧(StatusStrip)ToolStripStatusLabel2
和ToolStripProgressBar
)混合在一起ToolStripStatusLabel1
,如果有额外的空间,它会变大吗?在此先感谢您的时间和帮助!
〜IM
我正在开发一个Windows窗体应用程序(C#,.NET 4.0,VS 2010),其中我有一个非常标准的MainForm,带有ToolStrip(GripStyle:Hidden,Dock:Top,RenderMode:ManagerRenderMode).工具条包含一些基本项(ToolStripLabel,ToolStripSeparator,ToolStripSplitButton).
这呈现如下:
起初我只是想在工具条下面添加一个"底部"边框,但我也注意到这个工具条是用'圆角'渲染的(你可以在图像中看到右边的顶部和底部),以及垂直渐变线.
我怎样才能让这些角落不圆?
我试过了:
public class MainFormToolStripRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e)
{
base.OnRenderToolStripBorder(e);
var y = e.ToolStrip.Height-1;
e.Graphics.DrawLine(new Pen(SystemColors.ControlDark, 1), new Point(0, y), new Point(e.ToolStrip.Width, y));
}
Run Code Online (Sandbox Code Playgroud)
并通过this.toolStrip_Actions.Renderer=new MainFormToolStripRenderer();
我的表单初始化连接它.
这给了我底部边框,但没有为圆角做任何事情.此外,添加底部边框,圆角更明显:
接下来,我尝试在上面的相同事件处理程序中绘制一个矩形,以尝试(至少)隐藏实心矩形边框后面的圆角和垂直渐变.这不起作用,因为可用的绘图区域(e.AffectedBounds)位于圆角边框内.
我还尝试将ToolStrip的RenderMode设置为System(而不是使用我的渲染器).在这种情况下,工具条角似乎适合(矩形),但工具栏中的拆分按钮似乎被打破(单击向下箭头不显示下拉列表),原因尚不明确,整体外观-feel有点平庸(相当平坦,直到你将鼠标悬停在工具条中的某些按钮上).
我想最后我宁愿坚持使用ManageeRenderedMode,也不想继承自Professional的自定义渲染器 - 但我需要摆脱圆角.其中,我发现这个SO Q似乎与我正在看的很接近,但没有给我一个答案.
提前致谢
我有一个StatusStrip
停靠在C#表单的底部,它包含一个标签,其中的文本显示正常,除非文本长度较长,然后根本不显示,我必须加宽表格然后全部突然之间出现了.是否可以在下面的表格中显示:
This is a very long tex...
Run Code Online (Sandbox Code Playgroud)
从而使用户知道应用程序是显示的东西,然后他就可以扩大它自己,因为当它是完全不可见,它并不表示任何用户.
当鼠标悬停在它们上时,ToolStripItems显示活动突出显示,即使它们所在的表单不在焦点上.但是,除非表格是重点,否则他们不会显示他们的工具提示.我见过ToolStrip'click-though'hack.任何人都知道如何使ToolStripButton在其父表单不在焦点时显示其工具提示?
谢谢!
我的主表单上有一个带有ToolStrip的.NET 2.0 WinForms应用程序.有时,ToolStrip图标不会响应第一次鼠标单击,因此我必须单击该图标两次.它只是一个带有几个图标和工具提示文本的标准ToolStrip,我没有做任何特别的事情.这是常见的吗?
我有一个带有包含按钮的工具条的Windows窗体应用程序.令人沮丧的是,我必须在任何按钮上单击两次才能在表单未聚焦时触发它.第一次单击似乎激活表单,然后第二次单击单击按钮(或者,我可以单击表单上的任意位置,然后单击按钮一次).如何修复此问题,即使表单未激活,我也可以直接点击按钮?
编辑:我觉得这应该是可行的,因为它适用于SQL Server Profiler和Visual Studio等程序(不是这些程序使用WinForms,但它表明它不是操作系统问题).