Как реализовать несколько кнопок с одинаковым поведением без копирования? [закрыто]C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Как реализовать несколько кнопок с одинаковым поведением без копирования? [закрыто]

Сообщение Anonymous »

Мой предыдущий вопрос был неточным, я его обновляю.
У меня есть 24 кнопки, которые отправляют команды открытия/закрытия процессору, с которым я общаюсь.

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

 // Card1 open channel
OpenCard1Channel1Command = new RelayCommand( OpenCardChannel( 0, 1 ) );
OpenCard1Channel2Command = new RelayCommand( OpenCardChannel( 0, 2 ) );
OpenCard1Channel3Command = new RelayCommand( OpenCardChannel( 0, 3 ) );
OpenCard1Channel4Command = new RelayCommand( OpenCardChannel( 0, 4 ) );
OpenCard1Channel5Command = new RelayCommand( OpenCardChannel( 0, 5 ) );
OpenCard1Channel6Command = new RelayCommand( OpenCardChannel( 0, 6 ) );
OpenCard1Channel7Command = new RelayCommand( OpenCardChannel( 0, 7 ) );
OpenCard1Channel8Command = new RelayCommand( OpenCardChannel( 0, 8 ) );
// Card2 open channel
OpenCard2Channel1Command = new RelayCommand( OpenCardChannel( 1, 1 ) );
OpenCard2Channel2Command = new RelayCommand( OpenCardChannel( 1, 2 ) );
OpenCard2Channel3Command = new RelayCommand( OpenCardChannel( 1, 3 ) );
OpenCard2Channel4Command = new RelayCommand( OpenCardChannel( 1, 4 ) );
OpenCard2Channel5Command = new RelayCommand( OpenCardChannel( 1, 5 ) );
OpenCard2Channel6Command = new RelayCommand( OpenCardChannel( 1, 6 ) );
OpenCard2Channel7Command = new RelayCommand( OpenCardChannel( 1, 7 ) );
OpenCard2Channel8Command = new RelayCommand( OpenCardChannel( 1, 8 ) );
// Card3 open channel
OpenCard3Channel1Command = new RelayCommand( OpenCardChannel( 2, 1 ) );
OpenCard3Channel2Command = new RelayCommand( OpenCardChannel( 2, 2 ) );
OpenCard3Channel3Command = new RelayCommand( OpenCardChannel( 2, 3 ) );
OpenCard3Channel4Command = new RelayCommand( OpenCardChannel( 2, 4 ) );
OpenCard3Channel5Command = new RelayCommand( OpenCardChannel( 2, 5 ) );
OpenCard3Channel6Command = new RelayCommand( OpenCardChannel( 2, 6 ) );
OpenCard3Channel7Command = new RelayCommand( OpenCardChannel( 2, 7 ) );
OpenCard3Channel8Command = new RelayCommand( OpenCardChannel( 2, 8 ) );
И это пример команды, которая у меня есть: 1,2,3,4...

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

public ICommand OpenCard1Channel1Command
{
get; set;
}
И вот как я пытался обновить фон кнопки, то же самое касается карточек 1 и 2. Я удалил эту часть OpenCardChannel

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

public Action OpenCardChannel (int cardIndex, int channelIndex)
{
if ( cardIndex == 0 )
{
if ( buttonStates0 [channelIndex - 1] == Brushes.DarkRed )
{
return () =>
{
Trace.WriteLine( $"0.card channel {channelIndex} with current condition DarkRed" );
ChangeButtonState( 0, channelIndex - 1, Brushes.LimeGreen );
scModel.SendChannelOpenRequest( cardIndex, channelIndex );
};
}
else if ( buttonStates0 [channelIndex - 1] == Brushes.LimeGreen )
{
return () =>
{
Trace.WriteLine( $"0.card channel {channelIndex} with current condition LimeGreen" );
ChangeButtonState( 0, channelIndex - 1, Brushes.DarkRed );
scModel.SendChannelCloseRequest( cardIndex, channelIndex );
};
}
}
И мое состояние ChangeButton

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

private void ChangeButtonState ( int cardIndex, int channelIndex, Brush brushToBeApplied)
{
switch ( cardIndex )
{
case 0:
ButtonStates0 [channelIndex] = brushToBeApplied;
break;
case 1:
buttonStates1 [channelIndex] = brushToBeApplied;
break;
case 2:
buttonStates2 [channelIndex] = brushToBeApplied;
break;
default:
break;
}
}
scModel — это моя модель SerialCommunicationModel, в которой я манипулирую данными для отправки и получения.
Я пытаюсь отправить данные, которые изменяются по отношению к состоянию кнопки, например, если на этом канале нет активной связи, он будет отображаться красным, и при нажатии на него будет отправлено открытое сообщение. Аналогично, если у него уже есть активное сообщение, оно будет отображаться зеленым, и при нажатии на него будет отправлено сообщение о закрытии.
Я могу изменить фон для первого щелчка, но после этого мой код не работает так, как я хочу. Чего мне не хватает и как я могу реализовать эти кнопки, не копируя тот же код. Заранее спасибо.

Подробнее здесь: https://stackoverflow.com/questions/787 ... py-pasting
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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