2012-11-24 65 views
1

我有一個繼承的表單並將其用作設置表單。我要求用戶輸入名稱來存儲,我要根據輸入的數據動態地改變表格標題(表格的文本屬性)。但如果我改變基本形式的標題,就會發生溢出。我也創建基本形式的FormTitle屬性來保存當前的表單名稱。C#動態表單文本

例如我的應用程序名稱是SerenaIR,我想爲所有表單顯示下面的樣式。

SerenaIR | storename | 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; 
    } 
+5

你可以提供一些代碼示例,以你試過和不工作? – pinkfloydx33

回答

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(); 
    } 
} 
+1

感謝朋友,你解決了我的問題! –

1

比方說Form2繼承了Form1,var strInput是從用戶輸入的文本。然後,當newing一個窗體2,也許你可以這樣寫:

//Form1, Form2 definition 
public partial class Form2 : Form1 
//set Form2 title. 
var strInput = "Sale"; 
var d2 = new Form2 {Text = base.Text + " | " + strInput}; 
+0

我有很多表單,並且我想通過在設置中更改商店名稱來更改所有繼承表單的標題。 –