Добавьте последнюю цифру или букву к флажку + «1» .checked = true - PullRequest
0 голосов
/ 14 октября 2019

Я хотел бы иметь возможность получить доступ к Checkbox (или Textbox или подобному), просто добавив последнюю цифру или букву, как это:

int number = 1;
CheckBox tempCheckbox = "myform.checkBoxTool" + number;
tempCheckbox.Checked = true;

Я думаю, это уже покрытоно я не могу найти нужные слова для поиска.

Ответы [ 3 ]

2 голосов
/ 14 октября 2019

У вас есть несколько возможностей. Наиболее очевидным является использование ControlsCollection вашего Form:

var checkBox = myForm.Controls["myform.checkBoxTool" + number];

Альтернативно перейти с ControlCollection.Find:

var checkBox = myForm.Controls.Find("myform.checkBoxTool" + number, true).FirstOrDefault();    

Однако, если выиметь несколько флажков, которые отличаются только одним индексом, поэтому лучше сохранить их в виде списка или массива CheckBox, во-первых:

List<CheckBox> myCheckBoxes = new List<CheckBox>();

Теперь вы можете легко получить к ним доступ:index:

var checkBox = myChekBoxes[number];

Имейте в виду, что индексы - как и любое число в .NET - начинаются с нуля. Таким образом, самый первый элемент в списке имеет нулевой индекс.

1 голос
/ 14 октября 2019

Технически, если tempCheckbox находится в той же форме , где код запроса , вы можете попробовать Linq ;

using System.Linq;

...

public partial class MyForm : Form {
  ...

  int number = 1;

  CheckBox tempCheckbox = this
    .Controls
    .Find($"checkBoxTool{number}", true) // we don't want "myform." here
    .OfType<CheckBox>()
    .FirstOrDefault();

  // If check box found, check it
  if (tempCheckbox != null)
    tempCheckbox.Checked = true;

Лучшим подходом является организация этих элементов управления в коллекцию, например Dictionary:

  public partial class MyForm : Form {
    private Dictionary<int, CheckBox> m_CheckBoxTools = new Dictionary<int, CheckBox>();

    public MyForm() {
      InitializeComponent();

      m_CheckBoxTools.Add(1, checkBoxTool1);
      m_CheckBoxTools.Add(3, checkBoxTool3); 
      m_CheckBoxTools.Add(25, checkBoxTool25);
    }

Затем вы можете запросить словарь

    if (m_CheckBoxTools.TryGetValue(number, out CheckBox tempCheckbox)) {
      tempCheckbox.Checked = true;
    } 
0 голосов
/ 14 октября 2019

вы можете использовать что-то вроде ниже

CheckBox chkList1 =new CheckBox();

chkList1.Text = strCheckboxText;

chkList1.ID="Chk"+intControlIndex;

chkList1.Font.Name = "Verdana";

chkList1.Font.Size = 9;

chkList1.Checked = true;

this.Form.Controls.Add(chkList1);

, тогда вы можете установить флажок и найти свой идентификатор. Предполагая, что флажок находится в панели управления.

   string str1="";
   foreach (Control c in panel1.Controls)
    {
        if((c is CheckBox) && ((CheckBox) c).Checked)                      
        str1 += c.ID+ ", "; 
    }

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