«Свернуть» Панель управления Borders для WinForms - PullRequest
1 голос
/ 28 марта 2009

Есть ли в WinForms какой-либо способ эмулировать коллапс границы из CSS?

Представьте себе, что у вас есть элемент управления Panel с рамкой FixedSingle, которая имеет черную рамку размером 1 пиксель и прикреплена к вершине формы. Вы добавляете второй элемент управления Panel с той же рамкой и также закрепляемым наверху, фактически помещая эту панель под первой панелью. Проблема в том, что когда нижняя часть верхней панели касается верхней части нижней панели, граница теперь имеет ширину 2 пикселя (нижняя часть верхней панели (1 пиксель) + верхняя часть нижней панели (1 пиксель) = 2 пикселя).

Я возился со свойствами элемента управления Panel, но ничего не видел, чтобы эти соприкасающиеся края перекрывались, поэтому граница между панелями составляет всего 1 пиксель. У кого-нибудь есть идеи?

(я использую Visual Basic .NET 2008)

Ответы [ 2 ]

1 голос
/ 28 марта 2009

Просто создайте свой собственный производный от панели элемент управления. Подделайте границу, нарисовав ее так, как вы хотите. Например:

using System;
using System.Drawing;
using System.Windows.Forms;

public class MyPanel : Panel {
  public MyPanel() {
    this.Dock = DockStyle.Top;
    this.DoubleBuffered = true;
    this.SetStyle(ControlStyles.ResizeRedraw, true);
  }
  protected override void OnPaintBackground(PaintEventArgs e) {
    base.OnPaintBackground(e);
    int y = this.ClientSize.Height - 1;
    int x = this.ClientSize.Width-1;
    e.Graphics.DrawLine(Pens.Black, 0, 0, 0, y);
    e.Graphics.DrawLine(Pens.Black, 0, y, x, y);
    e.Graphics.DrawLine(Pens.Black, x, 0, x, y);
  }
}

Добавьте новый класс в ваш проект и вставьте код, показанный выше. Компиляция. Перетащите новый элемент управления с верхней части панели инструментов на форму.

0 голосов
/ 28 марта 2009

Как и большинство встроенных элементов управления, свойство границы Panel является свойством типа «все или ничего». Было бы удобно указать, какие стороны панели получают границы, но, увы, нет. Если ваша цель - создать представление в виде сетки с несколькими ячейками, возможно, вам лучше нарисовать данные (и связанные линии сетки) на одной панели самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...