Рефакторинг приложения C# WinformC#

Место общения программистов C#
Ответить
Anonymous
 Рефакторинг приложения C# Winform

Сообщение Anonymous »

Мне поручили провести рефакторинг приложения C# Winform, все методы которого содержались в одном классе в файле формы. Я создал новый класс и переместил в этот класс несколько методов (после некоторых переписываний), но мне не удалось переместить ни один из методов, которые напрямую ссылаются на поля формы, то есть TextBoxOne.Text = "abc". (ошибки показаны ниже)
Чтобы найти решение, я создал упрощенный тестовый пример.

Код: Выделить всё

namespace UpdateFormData
{
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}
// Field manipulation
public void UpdateField1()
{
// do something meaningful
tbField1.Text = "Field 1 - " + DateTime.Now.ToString();
}
public void UpdateField2()
{
// do something meaningful
tbField2.Text = "Field 2 - " + DateTime.Now.ToString();
}

// Message
public void ShowMsg(int PassNo)
{
string MsgTitle = PassNo == 1 ? "First" : "Second";
string Fld1Txt = tbField1.Text;
string Fld2Txt = tbField2.Text;
MessageBox.Show($"Field 1: {Fld1Txt}\nField 2: {Fld2Txt}", $"{MsgTitle} Message");
}
// Test Button
private void btnTest_Click(object sender, EventArgs e)
{
int PassNo = 1;
string Fld1Txt = tbField1.Text;
string Fld2Txt = tbField2.Text;

ShowMsg(PassNo);
UpdateField1();
UpdateField2();
PassNo++;
ShowMsg(PassNo);
}

private void btnQuit_Click(object sender, EventArgs e)
{
tbField1.Text = "Field 1";
tbField2.Text = "Field 2";
this.Close();
}
}
}
Этот код работает точно так, как ожидалось. Однако когда я перемещаю методы UpdateField1, UpdateField2 и ShowMsg в новый класс (Utilities), поля формы не распознаются.

Код: Выделить всё

namespace UpdateFormData
{
public partial class ParentForm : Form
{
public ParentForm()
{
InitializeComponent();
}

// Test Button
private void btnTest_Click(object sender, EventArgs e)
{
int PassNo = 1;
string Fld1Txt = tbField1.Text;
string Fld2Txt = tbField2.Text;

Utilities.ShowMsg(PassNo);
Utilities.UpdateField1();
Utilities.UpdateField2();
PassNo++;
Utilities.ShowMsg(PassNo);
}

private void btnQuit_Click(object sender, EventArgs e)
{
tbField1.Text = "Field 1";
tbField2.Text = "Field 2";
this.Close();
}
}
}

namespace UpdateFormData
{
internal static class Utilities
{

// Field manipulation
public static void UpdateField1()
{
// do something meaningful
ParentForm.tbField1.Text = "Field 1 - " + DateTime.Now.ToString();
}
public static void UpdateField2()
{
// do something meaningful
ParentForm.tbField2.Text = "Field 2 - " + DateTime.Now.ToString();
}

// Message
public static void ShowMsg(int PassNo)
{
string MsgTitle = PassNo == 1 ? "First" : "Second";
string Fld1Txt = ParentForm.tbField1.Text;
string Fld2Txt = ParentForm.tbField2.Text;
MessageBox.Show($"Field 1: {Fld1Txt}\nField 2: {Fld2Txt}", $"{MsgTitle} Message");
}
// Test Button
private static void btnTest_Click(object sender, EventArgs e)
{
int PassNo = 1;
string Fld1Txt = ParentForm.tbField1.Text;
string Fld2Txt = ParentForm.tbField2.Text;

ShowMsg(PassNo);
UpdateField1();
UpdateField2();
PassNo++;
ShowMsg(PassNo);
}
}
}
Вот ошибки компиляции.

Код: Выделить всё

Error(active)  CS0122  'ParentForm.tbField1' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  11
Error(active)  CS0122  'ParentForm.tbField2' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  16
Error(active)  CS0122  'ParentForm.tbField1' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  23
Error(active)  CS0122  'ParentForm.tbField2' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  24
Error(active)  CS0122  'ParentForm.tbField1' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  31
Error(active)  CS0122  'ParentForm.tbField2' is inaccessible due to its protection level    UpdateFormData  D:\UpdateFormData\Utilities.cs  32
Что мне нужно сделать, чтобы сделать поля ParentForm доступными и обновляемыми? Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/788 ... pplication
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»