我想在窗口上使用多个屏幕(panel
或其他任何东西)!
我不想使用MDI Child Form
...
还有其他方法吗?
答案 0 :(得分:3)
对于您显示的第二个场景,您可以使用带有垂直显示的选项卡的Tab控件:
向表单添加TabControl。
将Alignment属性设置为Right。
将SizeMode属性设置为Fixed,以便所有选项卡的宽度相同。
将ItemSize属性设置为选项卡的首选固定大小。请记住,ItemSize属性的行为就像选项卡位于顶部,尽管它们是右对齐的。因此,为了使选项卡更宽,您必须更改高度属性,并且为了使它们更高,您必须更改宽度属性。
在下面的代码示例中,Width设置为25,Height设置为150。
将DrawMode属性设置为OwnerDrawFixed。
为TabControl的DrawItem事件定义一个处理程序,该事件从左到右呈现文本。
private void TabControl1_DrawItem(object sender, System.Windows.Forms.DrawItemEventArgs e)
{
Graphics g = e.Graphics;
Brush _TextBrush = default(Brush);
// Get the item from the collection.
TabPage _TabPage = TabControl1.TabPages(e.Index);
// Get the real bounds for the tab rectangle.
Rectangle _TabBounds = TabControl1.GetTabRect(e.Index);
if ((e.State == DrawItemState.Selected))
{
// Draw a different background color, and don't paint a focus rectangle.
_TextBrush = new SolidBrush(Color.Red);
g.FillRectangle(Brushes.Gray, e.Bounds);
}
else
{
_TextBrush = new System.Drawing.SolidBrush(e.ForeColor);
e.DrawBackground();
}
// Use our own font.
Font _TabFont = new Font("Arial", 10.0, FontStyle.Bold, GraphicsUnit.Pixel);
// Draw string. Center the text.
StringFormat _StringFlags = new StringFormat();
_StringFlags.Alignment = StringAlignment.Center;
_StringFlags.LineAlignment = StringAlignment.Center;
g.DrawString(_TabPage.Text, _TabFont, _TextBrush, _TabBounds, new StringFormat(_StringFlags));
}
答案 1 :(得分:1)
我们的方法是将“视图”创建为UserControl
,然后在代码中向/从表单上的面板添加/删除它们。大多数情况下,它们共享一组常用方法(接口IView
),因此我们可以检查视图是否为未保存的数据等。
答案 2 :(得分:0)
尝试Tab控件。希望它符合您的要求。