Изменить значение элемента управления на форме из класса (C #) - PullRequest
0 голосов
/ 11 мая 2011

Это должно быть довольно просто на самом деле - не знаю, в чем проблема.

У меня есть класс C # (Public.cs) и форма Windows (Form1.cs). Через функцию в Public.cs я хочу получить значение элемента управления в Form1 (без необходимости использования параметров объекта).

// This code appears in Public.cs
public string MyFunction(int num_val)
{
  if (chk_num.checked == true)
  {
     // Something here...
  }
}

Проблема в том, что мой класс не может найти контроль над моей формой. Есть ли способ, которым я должен ссылаться на него в C #?

Спасибо.

Ответы [ 2 ]

2 голосов
/ 11 мая 2011

Я бы настроил все наоборот

public class Public
{   
    public bool CheckNumber {get;set;}

    public string MyFunction(int val)
    {
        if(CheckNumber)
        {
            //do that thing
        }

        return ...
    }
}

public partial class Form1 : Form
{
    Public myinstance = new Public();
    public Form1()
    {
        InitializeComponent();
    }

    private void CheckBoxChanged(object sender, EventArgs e)
    {
         myinstance.CheckNumber = chk_num.checked;
    }
}    

Вам нужно будет присвоить CheckBoxChanged обработчику событий OnChanged для вашего флажка (который я предполагаю, что chk_num.

Таким образом, ваш класс Public не полагается на форму, чего не должно быть.

Как говорит Реддог, используйте лучшие имена, хотя я наполовину подозреваю вас 'Вы только что дали примеры имен в вашем вопросе.

2 голосов
/ 11 мая 2011

Я бы настоятельно рекомендовал выставить свойство Checked через определенное свойство в Form1 (возможно, с более значимым именем). Это поможет скрыть детали реализации (т. Е. Управляющую структуру) Form1 от вызывающей стороны и вместо этого выставить только логику, которая требуется другим пользователям для выполнения своей работы

Например:

public bool IsNumberRequested
{
    get { return chk_num.Checked; }
}

Или же, если вы все еще действительно хотите получить доступ к элементу управления напрямую, в конструкторе вы можете выбрать элемент управления и изменить его свойство Modifier на public (или что-то еще), что позволит вам получить доступ к объекту элемента управления с помощью кода, который вы Первоначально написано выше.

РЕДАКТИРОВАТЬ: (Ответ на основе комментария)

Public.cs по-прежнему будет нуждаться в ссылке на Form1, а затем вызовет свойство IsNumberRequested этого объекта.

// Public.cs
public class Public
{
    private Form1 _ui;

    public Public(Form1 ui) { _ui = ui };

    public string MyFunction(int num_val)
    {
         if (_ui.IsNumberRequested)
         {
              // Stuff
         }
         // Else, default Stuff
    }
}

В качестве альтернативы, вы также можете передать форму в качестве параметра MyFunction, а не использовать ее в качестве переменной экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...