1

我有一个继承的表格并将其用作设置表格。我要求用户输入要存储的名称,我想根据输入数据动态更改表单标题(表单的文本属性)。但是如果我更改基本表单标题,则会发生溢出。我还在基本表单中创建 FormTitle 属性以保存当前表单名称。

例如,我的应用程序名称是 SerenaIR,我想为我的所有表单显示以下样式。

塞雷纳航空 | 店铺名称 |
表格名称 ex: SerenaAIR | 超市 | 销售

FormTitle 属性

    private string _frmTitle;
    /// <summary>
    /// current form title for showing on title bar.
    /// </summary>
    [Category("JSCustomizer"),
     Description("The text that is displayed on form title bar.")]
    public string FormTitle
    {
        get { return _frmTitle; }
        set
        {
            try
            {
                _frmTitle = value;
                Invalidate();
                var appPreName = Properties.Settings.Default.AppNamePre + @" " + Properties.Settings.Default.AppName;

                if(_frmTitle.Length < 3)
                {
                    base.Text = appPreName;
                }
                else
                {
                    base.Text = appPreName + @" | " + _frmTitle;
                }
            }
            catch
            {
                return;
            }
        }
    }

在设置表单中,当我想通过以下代码更改标题时,我保存有关商店名称和基本表单的设置,所有继承的表单都会引发错误!

    private void JSfrmBaseLoad(object sender, EventArgs e)
    {
            Text = Properties.Settings.Default.AppNamePre + @" " + Properties.Settings.Default.AppName;
    }
4

2 回答 2

2

假设Form2继承了Form1,var strInput是用户输入的文本。然后,在新建 Form2 时,也许您可​​以编写:

//Form1, Form2 definition
public partial class Form2 : Form1
//set Form2 title.
var strInput = "Sale";
var d2 = new Form2 {Text = base.Text + " | " + strInput};
于 2012-11-24T16:09:19.077 回答
1

我的猜测是您正在创建导致溢出的无限循环。但我认为真正的问题是您误解了在这种情况下继承是如何工作的。更改基本表单上的非静态属性值不会更新继承表单的值,因为每个表单都是一个新实例。

我的建议是使用 Program.cs 中的属性来存储表单标题。在此示例中,我正在更改单击按钮时的表单标题。所有继承 Form1 的表单都会在 OnLoad 中设置新的表单标题。

程序.cs:

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        FormTitle = Properties.Settings.Default.FormTitle;

        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        Application.Run(new Form1());
    }

    public static string FormTitle { get; set; }
}

表格1:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    protected override void OnLoad(EventArgs e)
    {
        Text = Program.FormTitle;
        base.OnLoad(e);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        Program.FormTitle = "new form title";
        Text = Program.FormTitle;
        new Form2().Show();
    }
}
于 2012-11-24T16:43:35.400 回答