Текст динамической формы C#

У меня есть унаследованная форма, и я использую ее в качестве формы настройки. Я прошу пользователя ввести имя для сохранения, я хочу динамически изменять заголовок формы (текстовое свойство форм) в соответствии с входными данными. но если я изменю заголовок базовой формы, произойдет переполнение. также я создаю свойство FormTitle в базовой форме, чтобы сохранить текущее имя формы.

например, имя моего приложения — SerenaIR, и я хочу показать ниже стиль для всех своих форм.

СеренаИР | имя магазина | formname
ex: SerenaIR | Супермаркет | распродажа

Свойство 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;
    }

person Javad Adib    schedule 24.11.2012    source источник
comment
Можете ли вы предоставить пример кода того, что вы пробовали и не работает?   -  person pinkfloydx33    schedule 24.11.2012


Ответы (2)


Я предполагаю, что вы создаете бесконечный цикл, который вызывает переполнение. Но я думаю, что настоящая проблема заключается в том, что вы неправильно понимаете, как работает наследование в этом сценарии. Изменение значения нестатического свойства в базовой форме не приведет к обновлению значения для наследуемых форм, поскольку каждая форма является новым экземпляром.

Я предлагаю использовать свойство в 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();
    }
}
person Jamie Ide    schedule 24.11.2012

Допустим, 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};
person jguo1    schedule 24.11.2012
comment
У меня много форм, и я хочу изменить название всех унаследованных форм, изменив имя магазина в настройках. - person Javad Adib; 24.11.2012