Как я могу вернуть пространство из "Grip"
У меня есть StatusStrip с единственной ToolStripStatusLabel, Spring= true и цветом фона для уведомлений.
Проблема в том, что на правой стороне полосы состояния есть уродливый серый квадрат. Поймав какое-то время, я понял, что это размерный захват (у меня установлен SizingGrip = false, GripStyle = Hidden). Но даже при этом он скрыт, он все еще борется с пространством. Я не могу получить какой-либо контент на полосе статуса, чтобы проложить весь путь вправо.
Как бы вы обошли это? Примечание. Я не могу просто установить обратную цветность StatusStrip, потому что метка состояния меняет цвета и имеет некоторые эффекты затухания.
Ответы
Ответ 1
Свойство StatusStrip.Padding borked, оно возвращает неправильное значение для Padding.Right, если ручка калибровки отключена. Вы можете исправить это в своем конструкторе формы, например:
public Form1() {
InitializeComponent();
statusStrip1.Padding = new Padding(statusStrip1.Padding.Left,
statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom);
}
Использование свойства Left для указания Right - это исправление. Не беспокойтесь, отправляя эту ошибку в Connect, они не исправят ее.
Ответ 2
Посмотрите эту запись в блоге в MSDN. Вопрос состоял в том, чтобы вручную изменить размер ручки, и я думаю, что использование ToolStrip Renderer, как было предложено, может работать и на вас.
Проблема, которую я имею до сих пор, заключается в том, что она удаляет цвет фона на метке состояния в StatusStrip, поэтому это еще не решение, но это начало.
public MyForm()
{
InitializeComponent();
statusStrip1.Renderer = new MyRenderer();
}
private class MyRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
{
// don't draw at all
}
}
Ответ 3
У меня была следующая проблема: когда я установил tsslSeparator.Spring = true
, моя правая метка исчезла сразу же после потери фокуса tsslSeparator. Проблема возникла при включенной настройке размера. Когда он был отключен, все работало нормально.
Решение заключалось в том, чтобы установить правое поле для метки справа на что-то отличное от 0.
tsslLogging.Margin = new Padding(0, 3, 2, 2); // this is necessary for right alignment of status bar label
Надеюсь, это поможет кому-то.
Ответ 4
Если Microsoft не заинтересована в ее исправлении, кажется, что правильное исправление должно обрабатывать все ориентации и идеально исправить все полосы состояния (см. мой ответ на Получить всех детей для определения GetAllChildren)
public static StatusStrip FixPadding(this StatusStrip ss) {
if (!ss.SizingGrip) {
var fixpad = ss.Padding;
if (ss.Orientation == Orientation.Horizontal) {
if (ss.RightToLeft == RightToLeft.No)
fixpad.Right = fixpad.Left;
else
fixpad.Left = fixpad.Right;
}
else
fixpad.Bottom = fixpad.Top;
ss.Padding = fixpad;
}
return ss;
}
public static void FixStatusStripPadding(this Form f) {
foreach (var ss in f.GetAllChildren().OfType<StatusStrip>())
ss.FixPadding();
}