C # Как создать код для возврата формы к свойствам по умолчанию с помощью события нажатия кнопки? - PullRequest
3 голосов
/ 02 февраля 2010

Используя Visual C # 2008 Express Edition, я пытаюсь создать в форме кнопку, чтобы вернуть форме свойства по умолчанию, такие как размер, задний цвет и т. Д. У кого-нибудь есть примеры, как мне это сделать?

Ответы [ 4 ]

1 голос
/ 02 февраля 2010

Самым простым решением может быть определение некоторых переменных уровня формы и запись значений по умолчанию в событии, таком как событие загрузки формы:

// form scoped variables
private Color defaultBackColor;
private Rectangle defaultBounds;
private FormWindowState defaultFormWindowState;

// save the Form default Color, Bounds, FormWindowState
private void Form1_Load(object sender, EventArgs e)
{
    defaultBackColor = this.BackColor;
    defaultBounds = this.Bounds;
    defaultFormWindowState = this.WindowState;
}

Затем в Click Event вашей кнопки: сбросьте настройки по умолчанию:

// restore the defaults on Button click
private void btn_FormReset_Click(object sender, EventArgs e)
{
    this.WindowState = defaultFormWindowState;
    this.Bounds = defaultBounds;
    this.BackColor = defaultBackColor;
}

Есть несколько более эффективных способов сделать это, используя функцию «Настройки» Visual Studio (во время разработки и во время выполнения): проверить их по адресу:

Как: создать настройки приложения с помощью конструктора

Обзор настроек приложения

Как: записать настройки пользователя во время выполнения с помощью C #

Как: прочитать настройки во время выполнения с помощью C #

1 голос
/ 02 февраля 2010

Вы не можете сделать это без сохранения исходного состояния где-либо.

Просто создайте некоторый класс, который содержит информацию по умолчанию:

class DefaultFormInfo
{
    int Width { get; set; }
    int Height { get; set; }
}

Тогда воспользуемся отражением:

static DefaultFormInfo FormInfo = new DefaultFormInfo();

void FillDefaults()
{
            foreach (PropertyInfo pinf in FormInfo.GetType().GetProperties())
            {
                pinf.SetValue(FormInfo, this.GetType().GetProperty(pinf.Name).GetValue(this, null), null);
            }
}

void Restore()
{
    foreach (PropertyInfo pinf in FormInfo.GetType().GetProperties())
    {
        this.GetType().GetProperty(pinf.Name).SetValue(this, pinf.GetValue(FormInfo, null), null);
    }
}
1 голос
/ 02 февраля 2010

Самый простой способ - создать новый экземпляр формы и закрыть старый.Это требует небольшой операции, если это основная форма вашего приложения, закрытие которой приведет к прекращению работы программы.Начните с открытия Program.cs и измените его так, чтобы он выглядел следующим образом:

static class Program {
    [STAThread]
    static void Main() {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        AppContext = new ApplicationContext();
        AppContext.MainForm = new Form1();
        Application.Run(AppContext);
    }
    public static ApplicationContext AppContext;
}

Переменная ApplicationContext теперь контролирует время жизни приложения, а не экземпляра Form1.Вы можете воссоздать форму с таким кодом в Form1:

    private void button1_Click(object sender, EventArgs e) {
        Form1 frm = new Form1();
        frm.StartPosition = FormStartPosition.Manual;
        frm.Location = this.Location;
        frm.Size = this.Size;
        Program.AppContext.MainForm = frm;
        frm.Show();
        this.Close();
    }
1 голос
/ 02 февраля 2010

Для каждой информации о свойстве вы можете получить DefaultValueAttribute и установить для необходимого свойства его значение.

...