C # Использование только пары кнопок для разных методов?

Ниже приведен пример привязки неизвестного количества столбцов записи к значениям для вставки.

public function insert($table, array $data)
{
    $sql = "INSERT INTO $table (" . join(',', array_keys($data)) . ') VALUES ('
        . str_repeat('?,', count($data) - 1). '?)';

    if($sth = $this->db->prepare($sql))
    {
        $sth->execute(array_values($data));
        return $this->db->lastInsertId();
    }
}

$id = $db->insert('user', array('name' => 'Bob', 'email' => 'foo@example.com'));
0
задан Michael Clark 14 July 2018 в 01:43
поделиться

2 ответа

Не вдаваясь в подробности о том, как вышеприведенный код может быть структурирован лучше, вот решение, использующее C # 7. Обратите внимание, как назначается локальная функция для обработки события, а затем не назначена - с помощью делегирование типа ввода

void page1(){
    txtStory.Text = "Can you sneak past the enemy?";

    void Btn1Click(object s, EventArgs ev)
    {
        luckCheck();
        if (lucky) {page2(); clearButtons(); btn1.Click -= Btn1Click; }
        else {page3(); clearButtons();}
    };

    btn1.Click += Btn1Click;

    void luckCheck(){
    int luckTest = gen.Next(1,12);
    if (luckTest <= playerLuck) {lucky = true;}
    else {lucky = false;}
    }

    void clearButtons(){
    btnN.Text = "";
    btnS.Text = "";
    btnE.Text = "";
    btnW.Text = "";
    btn1.Text = "";
    btn2.Text = "";
    btn3.Text = "";
    btn4.Text = "";
    btn5.Text = "";
    btn6.Text = "";
    }

    void page2(){
    txtStory.Text = "Lucky!";
    }

    void page3(){
    txtStory.Text = "Not Lucky!";
    }
1
ответ дан KnowHoper 17 August 2018 в 12:03
поделиться
  • 1
    Также требуется отцепление в else файла Btn1Click или вне условия вообще. – Richardissimo 14 July 2018 в 04:39

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

Но

Подумайте о другом дизайне, где у вас есть класс Page для представления каждой страницы. Этот класс имел бы историю как свойство на ней и коллекцию возможных Choice s (а не жесткое кодирование 6 из них). Choice является классом со значением строки Description и Action, который должен быть выполнен, если он используется.

Ваше приложение может содержать свойство CurrentPage, и действие вашего Choice должно быть способный перемещаться, изменяя эту страницу. Etc и т. Д. ...

Надеюсь, что это поможет.

P.S. дополнительный наконечник. Вместо того, чтобы возвращать результат метода luckCheck в поле класса, рассмотрите его перепроектирование, чтобы вернуть результат:

bool luckCheck(){
    int luckTest = gen.Next(1,12);
    return luckTest <= playerLuck;
}
2
ответ дан Richardissimo 17 August 2018 в 12:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: