C# 在Windows窗体中标识控件

C# 在Windows窗体中标识控件,c#,winforms,visual-studio-2010,C#,Winforms,Visual Studio 2010,任何人都可以识别Microsoft Outlook“插入签名”模式中要编辑的“选择签名”、“选择默认签名”和“编辑签名”是什么类型的Windows窗体控件吗?我不知道这是一个超级灌木面板,还是我找不到的其他控件 它们是分组框,尽管它们的边界看起来有点变化。 如果您想自定义自己的,您可以对WinForms groupbox进行自定义(在某种程度上),但使用WPF groupbox并阅读中的样式设置将更容易 也必须阅读。它们是分组框,尽管它们的边界看起来有点修改。 如果您想自定义自己的,您可以对Wi

任何人都可以识别Microsoft Outlook“插入签名”模式中要编辑的“选择签名”、“选择默认签名”和“编辑签名”是什么类型的Windows窗体控件吗?我不知道这是一个超级灌木面板,还是我找不到的其他控件


它们是分组框,尽管它们的边界看起来有点变化。 如果您想自定义自己的,您可以对WinForms groupbox进行自定义(在某种程度上),但使用WPF groupbox并阅读中的样式设置将更容易


也必须阅读。

它们是分组框,尽管它们的边界看起来有点修改。 如果您想自定义自己的,您可以对WinForms groupbox进行自定义(在某种程度上),但使用WPF groupbox并阅读中的样式设置将更容易


也必须阅读。

它们根本不是控件。在这个对话框中,您看到的大部分内容都是我所说的“伪控件”,这是一些看起来和操作起来都像控件,但没有系统窗口的绘制位。通过使用间谍工具查找(不存在的)系统窗口,可以看到这一点

您可以通过Graphics.DrawText和ControlPaint.DrawXXX实现这一点,其中XXX我不确定。也许是边界,还是三维边界

这里有一个既便宜又肮脏的例子。我使用WinForms标签控件是因为它很简单

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

public class Form1 : Form
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public Form1()
    {
        ClientSize = new Size(400, 200);
        Controls.Add(new LineLabel { Text = "Edit signature", Location = new Point(10, 10), Anchor = AnchorStyles.Left | AnchorStyles.Right, Width = 380 });
    }
}

public class LineLabel : Label
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        SizeF textSize = e.Graphics.MeasureString(this.Text, this.Font);
        int leftWidth = (int)(textSize.Width + 2);
        Rectangle bounds = new Rectangle(leftWidth, Height / 2 - 4, Bounds.Width - leftWidth, 2);
        ControlPaint.DrawBorder(e.Graphics, bounds, Color.DarkGray, ButtonBorderStyle.Solid);
    }
}

它们根本不是控制。在这个对话框中,您看到的大部分内容都是我所说的“伪控件”,这是一些看起来和操作起来都像控件,但没有系统窗口的绘制位。通过使用间谍工具查找(不存在的)系统窗口,可以看到这一点

您可以通过Graphics.DrawText和ControlPaint.DrawXXX实现这一点,其中XXX我不确定。也许是边界,还是三维边界

这里有一个既便宜又肮脏的例子。我使用WinForms标签控件是因为它很简单

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

public class Form1 : Form
{
    [STAThread]
    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public Form1()
    {
        ClientSize = new Size(400, 200);
        Controls.Add(new LineLabel { Text = "Edit signature", Location = new Point(10, 10), Anchor = AnchorStyles.Left | AnchorStyles.Right, Width = 380 });
    }
}

public class LineLabel : Label
{
    protected override void OnPaint(PaintEventArgs e)
    {
        base.OnPaint(e);

        SizeF textSize = e.Graphics.MeasureString(this.Text, this.Font);
        int leftWidth = (int)(textSize.Width + 2);
        Rectangle bounds = new Rectangle(leftWidth, Height / 2 - 4, Bounds.Width - leftWidth, 2);
        ControlPaint.DrawBorder(e.Graphics, bounds, Color.DarkGray, ButtonBorderStyle.Solid);
    }
}

我怀疑它们是分组框,但我不能完全确定,因为我无法获得与我正在开发的表单相匹配的外观。在哪里可以找到组框控件的主题?我怀疑它们是组框,但我不能完全确定,因为我无法获得与我正在开发的表单相匹配的外观。我在哪里可以找到分组框控件的主题?我确实认为它是某种控件,例如,您可以从Select中带下划线的“c”中看到。它看起来具有groupBox的功能,而没有实际的box。当然,使用您描述的方法可以实现下划线和焦点捕获,但这似乎比一些本机控件已经提供的工作要多。当然,这需要更多的工作。专业的Windows GUI应用程序需要做的工作比在一个窗口上点击一堆标准控件要多。这是Office的标准,这是一个应用程序,它经历了许多代GUI“改进”,都是通过“伪控件”完成的。缎带就是一个典型的例子。这是一个单独的控件,而不是一堆单独的控件。@Magnum这样做的原因主要是性能。系统窗口是昂贵的资源。但这也是因为摆脱了系统窗口,使您能够更灵活地处理位如何彼此接近,甚至重叠。我确实认为这是一种控制,例如,您可以从Select中带下划线的“c”中看到。它看起来具有groupBox的功能,而没有实际的box。当然,使用您描述的方法可以实现下划线和焦点捕获,但这似乎比一些本机控件已经提供的工作要多。当然,这需要更多的工作。专业的Windows GUI应用程序需要做的工作比在一个窗口上点击一堆标准控件要多。这是Office的标准,这是一个应用程序,它经历了许多代GUI“改进”,都是通过“伪控件”完成的。缎带就是一个典型的例子。这是一个单独的控件,而不是一堆单独的控件。@Magnum这样做的原因主要是性能。系统窗口是昂贵的资源。但这也是因为摆脱了系统窗口,使您能够更灵活地处理位之间的相互接近,甚至重叠。