2013-02-17 3 views
2

Я использую Windows 7 и Winforms/C#.Как избежать 3-х пиксельных пробелов слева от ToolStrip в Winforms?

Когда я добавляю инструментальную панель в контейнер инструментальной панели, я получаю 3 пикселя пространства слева от панели инструментов. Даже если я установил местоположение в 0,0, он сбрасывает его обратно до 3,0. Вот фотография, чтобы продемонстрировать это:

enter image description here

Как я могу избежать этого? Я установил padding и margin ToolStripContainer равным 0 и экспериментировал с разными RenderModes, но ничего не помогает. Есть идеи?

+0

Вы пытались изменить элементы инструментальной панели (например, там есть проставка), см., Если изменение отступов/полей на 0 для этого эффекта ... – XtrmJosh

+0

Нет элемента-разделителя (или любого другого предмета) Я просто установил GripMargin на 10, 2, 2, 2, так что легче перетащить. –

ответ

5
public Form1() 
{ 
    InitializeComponent(); 
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0); 
} 

Просто установить RowMargin свойство ToolStripPanels в ToolStripContainer. Он не доступен в дизайнере, поэтому его необходимо установить в коде, как показано выше. Видимо по умолчанию Left свойство этого RowMargin устанавливается на 3. Поэтому местоположение не меняется, когда вы установите его в 0.

Результат:

ToolStripContainer with RowMargin of 0

EDIT: Кажется, я Я вызвал свое любопытство. Теперь я пытаюсь понять, смогу ли я избавиться от 2-пиксельного зазора внизу. До сих пор это намного сложнее отслеживать.

EDIT 2: Хорошо, я понял. Это выполнялось рендерером ToolStrip. В этом примере я использовал System как RenderMode, поэтому я добавил новый класс в проект, который наследует от ToolStripSystemRenderer и переопределяет метод OnRenderToolStripBorder и закомментировал вызов базовому методу.

using System.Windows.Forms; 

namespace WindowsFormsApplication1 
{ 
    public class MyToolStripSystemRenderer : ToolStripSystemRenderer 
    { 
     protected override void OnRenderToolStripBorder(ToolStripRenderEventArgs e) 
     { 
      //base.OnRenderToolStripBorder(e); 
     } 
    } 
} 


Затем я добавил еще одну строку в конструкторе формы, чтобы назначить пользовательские средства визуализации.

public Form1() 
{ 
    InitializeComponent(); 
    this.toolStrip1.Renderer = new MyToolStripSystemRenderer(); 
    this.toolStripContainer1.TopToolStripPanel.RowMargin = new Padding(0); 
} 


Результат:
ToolStrip panel with RowMargin of 0 and no 2 pixel border

Edit 3: Так я узнал, что сегодня это известная ошибка с ToolStripSystemRenderer. Полагаю, я этого не нашел, потому что изначально думал, что это связано с ToolStripContainer. Во всяком случае, для тех, кто это помогает, вот вопрос о «границе» инструментальной панели. https://stackoverflow.com/a/2060360/2056131

+0

Спасибо за решение! Я только что открыл 50 очков за то, что вам может быть интересно: http://stackoverflow.com/questions/15120432/moving-toolstrip-just-a-little-too-far-left-will-create -a-new-row-if-another-too –

+0

@DanW Да, я видел этот вопрос и играл с ним в течение нескольких дней, когда я мог найти время. Это не проблема, которая может быть решена чисто. Я опубликовал решение (на удивление это самый короткий из моих попыток и, вероятно, наименьшая ошибка), я надеюсь, что это сработает для вас. – sparky68967

 Смежные вопросы

  • Нет связанных вопросов^_^