superstar_v2/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.WordCountSearch.cs
jasonchenwork 9b6772686c 2508291614
控制項從屬設定更正
程式碼重構/瘦身
調整減少videoview閃爍
已點歌曲頁面自動定位邏輯調整
2025-08-29 16:15:54 +08:00

231 lines
11 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;
}
// 設置注音歌手相關控制項(包括圖片框、按鈕和輸入框)的顯示或隱藏狀態。
// <param name="isVisible">指定控件是否可見。True 為顯示False 為隱藏。</param>
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
}
}