флажок не работает, как ожидалось - PullRequest
1 голос
/ 25 января 2012

У меня есть три флажка в моей форме.Проблема в том, что, когда я проверяю все три, я получил только один флажок.Как я могу это исправить?

мой код:

    private void button1_Click(object sender, EventArgs e)
    {
        ConfigOptions itemToSave = 0;

        if (autoCapsNames.Checked)
        {
            itemToSave |= ConfigOptions.AutoCapsStr;
        }

        if (autoSort.Checked)
        {
            itemToSave |= ConfigOptions.IntantOrganization;
        }

        if (showLinesNumbers.Checked)
        {
            itemToSave |= ConfigOptions.ShowLinesNumber;
        }


        SaveConfigs(itemToSave);


    }

Спасибо

Ответы [ 2 ]

2 голосов
/ 25 января 2012

Предыдущий ответ должен решить вашу проблему, но он меняет способ обработки данных. Если вы хотите использовать метод побитового ИЛИ (как вы делаете сейчас), убедитесь, что вы правильно определили ConfigOptions. Значения, присвоенные ConfigOptions.AutoCapsStr, ConfigOptions.IntantOrganization и ConfigOptions.ShowLinesNumber, должны выбираться таким образом, чтобы определять значения, которые вы устанавливаете уникальным способом.

Если ConfigOptions является enum, вы можете попытаться определить его следующим образом:

enum ConfigOptions
{
    AutoCapsStr = 1, 
    IntantOrganization = 2, 
    ShowLinesNumber = 4
}

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

if (itemToSave & ConfigOptions.AutoCapsStr != 0)
{
    //ConfigOptions.AutoCapsStr is set, so do appropriate things here
}
0 голосов
/ 25 января 2012

Ваш код может устанавливать itemToSave только один раз. Если все ваши флажки отмечены, вы можете сохранить только showLineNumbers, поскольку вы перезаписываете itemToSave через каждый оператор if.

Возможно, вы захотите немного изменить свой подход. Вы могли бы

  1. SaveConfigs(itemToSave); внутри каждого if оператора, тем самым сохраняя каждый параметр конфигурации в отдельности.
  2. Храните каждый itemToSave внутри List<T> и просматривайте список, сохраняя в конце то, что вам нужно.

Вот быстрый и грязный подход к началу работы

private void button1_Click(object sender, EventArgs e)
{
    List<ConfigOptions> itemsToSave = default(List<ConfigOptions>);

    if (autoCapsNames.Checked)
    {
        itemsToSave.Add(ConfigOptions.AutoCapsStr);
    }

    if (autoSort.Checked)
    {
        itemsToSave.Add(ConfigOptions.IntantOrganization);
    }

    if (showLinesNumbers.Checked)
    {
        itemsToSave.Add(ConfigOptions.ShowLinesNumber);
    }

    SaveConfigs(itemsToSave); // You're passing the list, and parsing it within the SaveConfigs method.
}

В качестве альтернативы, если вы собираетесь использовать int в побитовом расчете, пожалуйста, смотрите ответ @ Lucas. Лично я никогда так не делал, но у него есть замечательный смысл. (Сегодня я кое-чему научился).

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