Как заменить жестко закодированную строку для текста метки в *.Designer.cs C#?

Как правильно заменить жестко закодированную строку для меток в Form1.Designers.cs?

Вместо:

        this.button1.Text = "TheButton";
        this.label1.Text = "TheLabel";

Я хочу написать:

        this.button1.Text = Resources.ButtonText;
        this.label1.Text = Resources.LabelText;

После изменения формы в визуальном конструкторе (добавление любого компонента и сохранение) генератор кода VS возвращает текст метки в жестко закодированную строку:

        this.button1.Text = Resources.ButtonText;
        this.label1.Text = "TheLabel";

Кто-нибудь знает, как решить эту проблему?

3 ответа

Решение

Запретить автоматическое изменение кода в Designer.cs для конкретной строки

using System;
using System.Windows.Forms;

namespace Test
{
    public partial class Form1 : Form
     {
       public Form1()
         {
           InitializeComponent();
           this.button1.Text = Resources.ButtonText;
         }
     }
}

Самым простым было бы сделать свой собственный Button/Labelгде это берет его Text собственность от Resources:

class MyButton: Button
{
    // put here attributes to stop its serialization into code and displaying in the designer
    public new string Text
    {
        get {return base.Text;}
        set {base.Text = value;}
    }

    public MyButton() : base()
    {
        base.Text = Resources.ButtonText;
    }
}

Только что нашел решение для предотвращения возврата ссылки в файле designer.cs.

Вместо

this.label1.Text = MyNamespace.Properties.Resources.gui_lable1_text;

сделай это

this.label1.Text = global::MyNamespace.Properties.Resources.gui_lable1_text;
Другие вопросы по тегам