using System.IO; namespace DualScreenDemo { public partial class PrimaryForm { private PictureBox pictureBoxWordCountSingers; private Button modifyButtonWordCountSingers; private Button clearButtonWordCountSingers; private Button closeButtonWordCountSingers; private Button enterButtonWordCountSingers; private string[] numberWordCountSymbols=["1","2","3","4","5","6","7","8","9","0"]; private RichTextBox inputBoxWordCountSingers; // 初始化 private void InitializeButtonsForWordCountSingers() { // 初始化所有語音按鈕 InitializeNumberWordCountSongsButtons(pictureBoxWordCountSingers, NumberWordCountButton_Click); // 初始化注音歌手的輸入框 InitializeInputBoxWordCountSingers(); // 初始化下排功能按鈕 InitializeSingerWordButton(); } private void InitializeSingerWordButton() { // 加載配置數據 var data = LoadBtnConfigData(); // 初始化「清除」按鈕 clearButtonWordCountSingers = new Button { Name = "btnClearWordCountSingers" }; ConfigureButton(clearButtonWordCountSingers, 55, 274, 72, 67, new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesWordCount"]["normal"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesWordCount"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesWordCount"]["mouseDown"])), ClearButtonWordCountSingers_Click); pictureBoxWordCountSingers.Controls.Add(clearButtonWordCountSingers); // 初始化「重填」按鈕 modifyButtonWordCountSingers = new Button { Name = "btnModifyWordCountSingers" }; ConfigureButton(modifyButtonWordCountSingers, 136, 274, 72, 67, new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesWordCount"]["normal"])), new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesWordCount"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesWordCount"]["mouseDown"])), ModifyButtonWordCountSingers_Click); pictureBoxWordCountSingers.Controls.Add(modifyButtonWordCountSingers); // 初始化「確認」按鈕 enterButtonWordCountSingers = new Button { Name = "btnEnterWordCountSingers" }; ConfigureButton(enterButtonWordCountSingers, 217, 274, 72, 67, new Bitmap(Path.Combine(serverPath, data["EnterButtonImagesWordCount"]["normal"])), new Bitmap(Path.Combine(serverPath, data["EnterButtonImagesWordCount"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["EnterButtonImagesWordCount"]["mouseDown"])), (sender, e) => FindWordCountSingers()); pictureBoxWordCountSingers.Controls.Add(enterButtonWordCountSingers); // 初始化「關閉」按鈕 closeButtonWordCountSingers = new Button { Name = "btnCloseWordCountSingers" }; ConfigureButton(closeButtonWordCountSingers, 298, 274, 72, 67, new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesWordCount"]["normal"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesWordCount"]["mouseOver"])), new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesWordCount"]["mouseDown"])), CloseButtonWordCountSingers_Click); pictureBoxWordCountSingers.Controls.Add(closeButtonWordCountSingers); } private void InitializeInputBoxWordCountSingers() { try { // 創建一個 RichTextBox 控件來作為輸入框 inputBoxWordCountSingers = new RichTextBox { Name = "inputBoxWordCountSingers", ForeColor = Color.Black, // 設定文字顏色 Font = new Font("Times New Roman", 26, FontStyle.Regular), // 設定字體樣式 ScrollBars = RichTextBoxScrollBars.None // 不顯示滾動條 }; // 調整和定位輸入框的位置及大小 ResizeAndPositionControl(inputBoxWordCountSingers, 10, 55, 400, 60); // 將輸入框加入到窗體的控件集合中 pictureBoxWordCountSingers.Controls.Add(inputBoxWordCountSingers); } catch (Exception ex) { // 如果初始化過程中出現錯誤,則在控制台輸出錯誤信息 Console.WriteLine("Error initializing inputBoxWordCountSingers: " + ex.Message); } } // 顯示圖片並根據配置文件設置顯示區域的大小和位置。 private void ShowImageOnPictureBoxWordCountSingers(string imagePath) { // 加載原始圖片 Bitmap originalImage = new Bitmap(imagePath); // 設置圖片到 PictureBox pictureBoxWordCountSingers.Image = originalImage; // 調整 PictureBox 大小和位置 ResizeAndPositionPictureBox(pictureBoxWordCountSingers, 778, 366, 420, 350); // 顯示圖片 pictureBoxWordCountSingers.Visible = true; } // 設置注音歌手相關控制項(包括圖片框、按鈕和輸入框)的顯示或隱藏狀態。 // 指定控件是否可見。True 為顯示,False 為隱藏。 private void SetWordCountSingersAndButtonsVisibility(bool isVisible) { // 定義一個動作來處理控制項的顯示或隱藏 System.Action action = () => { try { // 暫停控制項佈局的重新排版,提高效率 SuspendLayout(); if (isVisible) SetUIVisible(pictureBoxWordCountSingers); else CloseUI(pictureBoxWordCountSingers); } catch (Exception ex) { Console.WriteLine("Error in SetWordCountSingersAndButtonsVisibility: " + ex.Message); } }; // 檢查是否需要在主執行緒外執行 if (this.InvokeRequired) { this.Invoke(action); // 如果需要,透過主執行緒執行 } else { action(); // 否則直接執行 } } #region 按鈕點擊事件 private void WordCountSearchSingersButton_Click(object sender, EventArgs e) { // 設定按鈕背景,將「字數搜尋」設為啟動狀態,其餘按鈕恢復為正常狀態 UpdateSSearchBtn(wordCountSearchButton, wordCountSearchActiveBackground); // 載入設定檔,取得圖片路徑資訊 var configData = LoadBtnConfigData(); // 取得「字數歌手圖片」的完整路徑 string imagePath = Path.Combine(serverPath, configData["ImagePaths"]["WordCountSingers"]); // 在 PictureBox 中顯示對應的「字數歌手」圖片 ShowImageOnPictureBoxWordCountSingers(Path.Combine(serverPath, imagePath)); // 設定不同搜尋模式的 UI 控件可見性 SetZhuYinSingersAndButtonsVisibility(false); // 隱藏注音搜尋相關控件 SetEnglishSingersAndButtonsVisibility(false); // 隱藏英文字母搜尋相關控件 SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件 SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件 //SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框 SetWordCountSingersAndButtonsVisibility(true); // 顯示字數搜尋相關控件 ResetinputBox(); // 顯示「字數歌手搜尋」的圖片框 pictureBoxWordCountSingers.Visible = true; } private void ModifyButtonWordCountSingers_Click(object sender, EventArgs e) { // 如果輸入框不為空,且包含輸入內容,則刪除最後一個字符 if (pictureBoxWordCountSingers.Controls.Contains(inputBoxWordCountSingers) && inputBoxWordCountSingers.Text.Length > 0) { inputBoxWordCountSingers.Text = inputBoxWordCountSingers.Text.Substring(0, inputBoxWordCountSingers.Text.Length - 1); } } private void ClearButtonWordCountSingers_Click(object sender, EventArgs e) { // 如果輸入框不為空,則清空該框的文本內容 if (pictureBoxWordCountSingers.Controls.Contains(inputBoxWordCountSingers) && inputBoxWordCountSingers.Text.Length > 0) { inputBoxWordCountSingers.Text = ""; } } private void CloseButtonWordCountSingers_Click(object sender, EventArgs e) { // 隱藏 WordCount 歌手圖片框 pictureBoxWordCountSingers.Visible = false; wordCountSearchButton.BackgroundImage = wordCountSearchNormalBackground; // 隱藏與 WordCount 歌手相關的所有按鈕 SetWordCountSingersAndButtonsVisibility(false); } private void FindWordCountSingers(){ string searchText = inputBoxWordCountSingers.Text; // 取得輸入內容 if (int.TryParse(searchText, out int length)) { //var searchResults = allArtists.Where(artist => artist.Name.Length == length).ToList(); string query = $"SELECT * FROM artists WHERE CHAR_LENGTH(name) = {length} ;"; var searchResults = SearchSingers_Mysql(query); // 設定當前頁數為 0,並加載搜索結果 currentPage = 0; currentArtistList = searchResults; totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage); multiPagePanel.currentPageIndex = 0; multiPagePanel.LoadSingers(currentArtistList); } } private void NumberWordCountButton_Click(object sender, EventArgs e) { var button = sender as Button; if (button != null && button.Tag != null) { if (inputBoxWordCountSingers.Visible) { inputBoxWordCountSingers.Text += button.Tag.ToString(); } } } #endregion } }