using System.IO; namespace DualScreenDemo { public partial class PrimaryForm { private PictureBox pictureBoxEnglishSingers; private Button[] numberButtonsForSingers; private Button[] letterButtonsForEnglishSingers; private Button modifyButtonEnglishSingers; private Button clearButtonEnglishSingers; private Button closeButtonEnglishSingers; private RichTextBox inputBoxEnglishSingers; private void InitializeButtonsForEnglishSingers() { InitializeEngAlphbtSingerBtns(pictureBoxEnglishSingers,LetterButtonEnglishSingers_Click); InitializeInputBoxEnglishSingers(); InitializeEngSingersButton(); } private void InitializeEngSingersButton() { var data = LoadBtnConfigData(); modifyButtonEnglishSingers = new Button { Name = "modifyButtonEnglishSingers" }; ConfigureButton(modifyButtonEnglishSingers, 650, 275, 72, 67, new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesEnglish"]["normal"])), new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesEnglish"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesEnglish"]["mouseDown"])), ModifyButtonEnglishSingers_Click); pictureBoxEnglishSingers.Controls.Add(modifyButtonEnglishSingers); clearButtonEnglishSingers = new Button { Name = "clearButtonEnglishSingers" }; ConfigureButton(clearButtonEnglishSingers, 8, 275, 72, 67, new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesEnglish"]["normal"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesEnglish"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesEnglish"]["mouseDown"])), ClearButtonEnglishSingers_Click); pictureBoxEnglishSingers.Controls.Add(clearButtonEnglishSingers); closeButtonEnglishSingers = new Button { Name = "closeButtonEnglishSingers" }; ConfigureButton(closeButtonEnglishSingers, 730, 275, 72, 67, new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesEnglish"]["normal"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesEnglish"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesEnglish"]["mouseDown"])), CloseButtonEnglishSingers_Click); pictureBoxEnglishSingers.Controls.Add(closeButtonEnglishSingers); } private void InitializeEngAlphbtSingerBtns(Control control, EventHandler handler) { numberButtonsForSingers = new Button[10]; letterButtonsForEnglishSingers = new Button[26]; // 設置上排按鈕 int x = 8; for (int i = 0; i < 10; i++) { CreateNumberEngSingerBtns(i, x, 65, control, handler); x += 80; } x = 8; for (int i = 0; i < 10; i++) { CreateEngAlphbtSingerBtns(i, x, 135, control, handler); x += 80; } x = 40; for (int i = 10; i < 19; i++) { CreateEngAlphbtSingerBtns(i, x, 205, control, handler); x += 80; } // 設置下排按鈕 x = 88; for (int i = 19; i < 26; i++) { CreateEngAlphbtSingerBtns(i, x, 275, control, handler); x += 80; } } private void CreateNumberEngSingerBtns(int index, int x, int y, Control control, EventHandler handler) { try { // 加載配置數據 var data = LoadBtnConfigData(); // 創建語音按鈕並設置其屬性 numberButtonsForSingers[index] = new Button { Name = $"ButtonsForEnglish_{ButtonsNumberSymbols[index]}", // 按鈕名稱設為語音符號名稱 }; ConfigureButton(numberButtonsForSingers[index], x, y, 72, 67, new Bitmap(Path.Combine(serverPath, data["NumberButtonImages"][$"button{index}_normal"])), new Bitmap(Path.Combine(serverPath, data["NumberButtonImages"][$"button{index}_mouseOver"])), new Bitmap(Path.Combine(serverPath, data["NumberButtonImages"][$"button{index}_mouseDown"])), handler); // 設置按鈕的 Tag 屬性為對應的語音符號 numberButtonsForSingers[index].Tag = ButtonsNumberSymbols[index]; // 將按鈕添加到表單的控制項集合中 control.Controls.Add(numberButtonsForSingers[index]); } catch (Exception ex) { Console.WriteLine($"Error creating button at index {index}: {ex.Message}"); } } private void CreateEngAlphbtSingerBtns(int index, int x, int y, Control control, EventHandler handler) { try { // 加載配置數據 var data = LoadBtnConfigData(); // 創建語音按鈕並設置其屬性 letterButtonsForEnglishSingers[index] = new Button { Name = $"ButtonsForEnglishSingers_{ButtonsEnglishSymbols[index]}", // 按鈕名稱設為語音符號名稱 }; ConfigureButton(letterButtonsForEnglishSingers[index], x, y, 72, 67, new Bitmap(Path.Combine(serverPath, data["EnglishLetterButtonImages"][$"button{index}_normal"])), new Bitmap(Path.Combine(serverPath, data["EnglishLetterButtonImages"][$"button{index}_mouseOver"])), new Bitmap(Path.Combine(serverPath, data["EnglishLetterButtonImages"][$"button{index}_mouseDown"])), handler); // 設置按鈕的 Tag 屬性為對應的語音符號 letterButtonsForEnglishSingers[index].Tag = ButtonsEnglishSymbols[index]; // 將按鈕添加到表單的控制項集合中 control.Controls.Add(letterButtonsForEnglishSingers[index]); } catch (Exception ex) { Console.WriteLine($"Error creating button at index {index}: {ex.Message}"); } } private void InitializeInputBoxEnglishSingers() { try { string fontName = "Times New Roman"; float fontSize = 26; FontStyle fontStyle = FontStyle.Regular; Color foreColor = Color.Black; inputBoxEnglishSingers = new RichTextBox { Visible = false, Name = "inputBoxEnglishSingers", ForeColor = foreColor, Font = new Font(fontName, fontSize / 900 * Screen.PrimaryScreen.Bounds.Height, fontStyle) }; ResizeAndPositionControl(inputBoxEnglishSingers, 10, 12, 455, 47); pictureBoxEnglishSingers.Controls.Add(inputBoxEnglishSingers); } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } private void ShowImageOnPictureBoxEnglishSingers(string imagePath) { try { Bitmap originalImage = new Bitmap(imagePath); pictureBoxEnglishSingers.Image = originalImage; ResizeAndPositionPictureBox(pictureBoxEnglishSingers, 390, 360, 808, 356); pictureBoxEnglishSingers.Visible = true; } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } } private void SetEnglishSingersAndButtonsVisibility(bool isVisible) { System.Action action = () => { SuspendLayout(); if (isVisible) SetUIVisible(pictureBoxEnglishSingers); else CloseUI(pictureBoxEnglishSingers); ResumeLayout(); PerformLayout(); }; if (this.InvokeRequired) { this.Invoke(action); } else { action(); } } private void EnglishSearchSingersButton_Click(object sender, EventArgs e) { UpdateSSearchBtn(englishSearchButton, englishSearchActiveBackground); bool shouldBeVisible = !pictureBoxEnglishSingers.Visible; var configData = LoadBtnConfigData(); string imagePath = Path.Combine(serverPath, configData["ImagePaths"]["EnglishSingers"]); ShowImageOnPictureBoxEnglishSingers(Path.Combine(serverPath, imagePath)); SetZhuYinSingersAndButtonsVisibility(false); SetPinYinSingersAndButtonsVisibility(false); SetHandWritingForSingersAndButtonsVisibility(false); SetWordCountSingersAndButtonsVisibility(false); // 隱藏字數搜尋相關控件 SetEnglishSingersAndButtonsVisibility(true); //SetPictureBoxArtistSearchAndButtonsVisibility(false); ResetinputBox(); pictureBoxEnglishSingers.Visible = true; } private void LetterButtonEnglishSingers_Click(object sender, EventArgs e) { var button = sender as Button; if (button != null && button.Tag != null) { if (inputBoxEnglishSingers.Visible) { inputBoxEnglishSingers.Text += button.Tag.ToString(); } } } private void ModifyButtonEnglishSingers_Click(object sender, EventArgs e) { if (pictureBoxEnglishSingers.Controls.Contains(inputBoxEnglishSingers) && inputBoxEnglishSingers.Text.Length > 0) { inputBoxEnglishSingers.Text = inputBoxEnglishSingers.Text.Substring(0, inputBoxEnglishSingers.Text.Length - 1); } } private void ClearButtonEnglishSingers_Click(object sender, EventArgs e) { if (pictureBoxEnglishSingers.Controls.Contains(inputBoxEnglishSingers) && inputBoxEnglishSingers.Text.Length > 0) { inputBoxEnglishSingers.Text = ""; } } private void CloseButtonEnglishSingers_Click(object sender, EventArgs e) { pictureBoxEnglishSingers.Visible = false; englishSearchButton.BackgroundImage = englishSearchNormalBackground; FindEnglishSingers(); SetEnglishSingersAndButtonsVisibility(false); } private void FindEnglishSingers() { string searchText = inputBoxEnglishSingers.Text; string query = string.IsNullOrWhiteSpace(searchText) ? "SELECT * FROM artists LIMIT 1000;" : $"SELECT * FROM artists WHERE `name` LIKE '%{searchText}%';"; //string query = $"SELECT * FROM ArtistLibrary WHERE `歌手姓名` LIKE '{searchText}%' "; var searchResults = SearchSingers_Mysql(query); currentPage = 0; currentArtistList = searchResults; totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); multiPagePanel.currentPageIndex = 0; multiPagePanel.LoadSingers(currentArtistList); } } }