InlineKeyboardMarkup - biroz boshqacharoq tushuncha. Uning yordami bilan biz murakkab amallarni bajarishimiz mumkin bo'ladi.
Bu turdagi klaviaturani hosil qilishda InlineKeyboardButton sinfiga mansub obyektlardan foydalaniladi. InlineKeyboardButton bir vaqtning o'zida ham tugma matnini, hamdaunga biriktirilgan datani olib yuradi. Ya'ni, bu data orqali, botimizni keyingi vazifalarini belgilashimiz mumkin.
OnCallBackQuery - InlineKeyboardButton bosilganda hosil bo'ladigan xodisa hisoblanadi. Ko'rib turganingizdek biz ham bu xodisa ishlagan paytda, CallBack() deb nomlangan event_handler funksiyaga murojaat qilishni ko'rsatib qo'ydik.
InlineKeyboardButton sinfiga mansub bir nechta metodlar mavjud, yuqoridagi misolda WithCallbackData() ko'rinishidan foydalanildi. Ushbu metoddan joy olgan callbackData maydoni orqali keyingi vazifani belgilashga muvaffaq bo'ldik.
E'tiborli bo'ling, callbackdata maydoni - 1 - 64 baytgacha bo'lgan oraliqni qabul qila oladi.
Endigi navbatda, tugmalarni dinamik holatda hosil qilishni ko'rib chiqamiz.
if (e.Message.Text=="tugmalar"){ // jagged massivini hosil qilishInlineKeyboardButton[][] button =newInlineKeyboardButton[2][];button[0] =newInlineKeyboardButton[5];button[1] =newInlineKeyboardButton[5];for (int i =0; i <10; i++) {if (i <button[0].Length) { // 1 - massivbutton[0][i] =newInlineKeyboardButton { Text = (i +1).ToString(), CallbackData = (i +1).ToString() }; }else { // 2 - massivbutton[1][i -button[0].Length] =newInlineKeyboardButton { Text = (i +1).ToString(), CallbackData = (i +1).ToString() }; } }var markup =newInlineKeyboardMarkup(button);awaitclient.SendTextMessageAsync( chatId:e.Message.Chat.Id, text:"Tugmalar", replyMarkup: markup ); }
Natija:
Tugmalarni 2 ta ustunda ham hosil qilishimiz mumkin. Endi, boshqacharoq yo'l bilan hosil qilib ko'ramiz
if (e.Message.Text=="tugmalar"){List<InlineKeyboardButton> buttons =newList<InlineKeyboardButton>();for (int i =0; i <10; i++) {buttons.Add(newInlineKeyboardButton { Text = (i +1).ToString(), CallbackData = (i +1).ToString() }); }var twoMenu =newList<InlineKeyboardButton[]>();for (var i =0; i <buttons.Count; i ++) {if (buttons.Count-1== i) {twoMenu.Add(new[] { buttons[i] }); }elsetwoMenu.Add(new[] { buttons[i],buttons[i +1] }); i++; }var markup =newInlineKeyboardMarkup(twoMenu.ToArray());awaitclient.SendTextMessageAsync( chatId:e.Message.Chat.Id, text:"Tugmalar", replyMarkup: markup ); }