我有一个继承的表单并将其用作设置表单。我要求用户输入名称进行存储,我想根据输入数据动态更改表单标题(表单的文本属性)。但如果我更改基本表单标题,则会发生溢出。我也以基本形式创建FormTitle属性以保存当前的表单名称。
例如我的应用程序名称是SerenaIR,我想在下面显示所有表单的样式。
SerenaIR |商店名称|表格名称
例如:SerenaIR | SuperMarket |销售
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;
}
答案 0 :(得分: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};
答案 1 :(得分:1)
我的猜测是你正在创建导致溢出的无限循环。但我认为真正的问题是你误解了继承在这种情况下是如何工作的。更改基表单上的非静态属性值不会更新继承表单的值,因为每个表单都是一个新实例。
我的建议是使用Program.cs中的属性来存储表单标题。在这个例子中,我在单击按钮时更改表单标题。所有继承Form1的表单都将在OnLoad中设置新表单标题。
的Program.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; }
}
Form1中:
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();
}
}