Рейтинг:
11
OriginalGriff
Не.
Вместо этого создайте перечисление:
private enum ChessPiece
{
Pawn = 1,
Rook = 2,
Knight = 3,
Bishop = 4,
Queen = 5,
King = 6,
Black = 16,
White = 0,
}
и назначьте значение части кнопке.Поле тегов.
Затем вы можете получить тип фрагмента и сравнить его с помощью оператора switch или if, или ...
private void ChessBlock_clicked(object sender, RoutedEventArgs e)
{
if (sender is Button btn)
{
ChessPiece piece = (ChessPiece)btn.Tag;
switch (piece & ~ChessPiece.Black)
{
case ChessPiece.Pawn:
// ...
break;
case ChessPiece.Rook:
// ...
break;
// ...
}
И ваш код становится легче читать, и гораздо менее подвержен ошибкам.
QuantumNova
Большое спасибо. Это очень помогло прояснить ситуацию :)
OriginalGriff
Всегда пожалуйста!
QuantumNova
Привет, все шло хорошо, но после некоторого тестирования я обнаружил некоторые проблемы. во-первых, не могли бы вы объяснить, что я поместил бы в тег, как я обнаружил, когда я помещаю числа, такие как 1, 2 и 3, чтобы загнать их в соответствующие части, которые он говорит мне, что я не могу преобразовать из строки в перечисление, во-вторых, не могли бы вы объяснить, что на самом деле делает "if (sender is Button btn)"? и также, как сторона в оба "(кусок &амп; ~фишка.Черный)", когда вы ссылаетесь только на один тип фигуры в футлярах. Извините, что беспокою вас, и большое спасибо.
OriginalGriff
Почему вы вставляете строки в тег? просто введите значение enum!
Button blackKing = new Button();
blackKing.Tag = ChessPiece.Black | ChessPiece.King;
If проверяет, если
sender
является кнопкой, и если да, то присваивает ее переменной Button, называемой btn.
Значение переключателя простое: ~шахматная доска.Черный инвертирует все биты в Черном значении перечисления и двоичном файле и удаляет все следы цвета из peice (так что вам не нужно проверять наличие черного и белого отдельно)
QuantumNova
хорошо, хорошо, большое спасибо, что вы мне очень помогли :)