Размещение инлайн кнопок по рядам
возникла следующая проблема: У меня есть код генерирующий лист с кнопками:
public static List<InlineKeyboardButton> GenButtons(List<Cakes> cakes)
{
List<InlineKeyboardButton> buttons = new List<InlineKeyboardButton>();
foreach (var c in cakes)
{
buttons.Add(InlineKeyboardButton.WithCallbackData(c.name, $"{c.id}"));
}
return buttons;
}
И соответственно, в основном коде есть его преобразование:
List<InlineKeyboardButton> buttons = new List<InlineKeyboardButton>();
buttons = GenButtons(cakes);
InlineKeyboardMarkup inlineKeyboard = buttons.ToArray();
Но если я после, отправлю сообщение с этой клавиатурой, бот мне на ответе выдаст нечто..Он все кнопки запихивает в один ряд, что усложняет чтение и использование самих кнопок.
Как мне сделать так, что бы каждая кнопка была в отдельном ряду? Или две кнопки в ряду, не суть важно. Знаю, что нужен еще один массив, но как его реализовать совсем непонятно..
Класс листа Cakes
public class Cakes
{
public uint id;
public string name;
public int count;
public int cost;
public string description;
}
Json обьект как пример класса:
[{"id":1,"name":"Карамельный торт","count":0,"cost":150,"description":"Шоколадный бисквит, хрустящий слой, шоколадный крем-чиз на сливках, карамель с арахисом."},{"id":2,"name":"Макарунс","count":0,"cost":90,"description":"Французское кондитерское изделие из яичных белков и мендальной муки. "},{"id":3,"name":"Маковый торт","count":-1,"cost":160,"description":"Маковый бисквит, крем-чиз на слоеном масле, цитрусовый курд."},{"id":4,"name":"Медовик Классический","count":-5,"cost":160,"description":"Классические медовыые коржи, сметанный крем. "},{"id":5,"name":"Медовик Малиновый","count":1,"cost":180,"description":"Классические медовые коржи, сметанный крем, с добавлением малины."},{"id":6,"name":"Мраморное печенье","count":0,"cost":40,"description":"Ароматная выпечка для любителей всего шоколадного."},{"id":7,"name":"Наполеон Square (Ponpon)","count":-2,"cost":180,"description":"Слоеное тесто, заварной крем Патисьер, натуральные ягоды для украшения. "},{"id":8,"name":"Наполеон Triangle (Tartin)","count":0,"cost":180,"description":"Слоеное тесто, заварной крем Патисьер, натуральные ягоды для украшения."}]
Ответы (1 шт):
Для представления кнопок в несколько рядов используется не массив, а массив массивов, или его еще называют "зубчатый" массив.
public static InlineKeyboardButton[][] GenerateButtons(List<Cakes> cakes, int buttonsPerRow = 0)
{
var data = cakes.Select(x => InlineKeyboardButton.WithCallbackData(c.name, $"{c.id}"));
if (buttonsPerRow == 0)
return new InlineKeyboardButton[][] { data.ToArray() };
else
return data.Chunk(buttonsPerRow).Select(c => c.ToArray()).ToArray();
}
В одну линию
InlineKeyboardMarkup inlineKeyboard = GenerateButtons(cakes);
[][][][][]
Вертикальной стопкой
InlineKeyboardMarkup inlineKeyboard = GenerateButtons(cakes, 1);
[]
[]
[]
[]
[]
По две в каждом ряду, в последнем - сколько осталось
InlineKeyboardMarkup inlineKeyboard = GenerateButtons(cakes, 2);
[][]
[][]
[]
