superstar_v2/PrimaryFormParts/SingerSearch/PrimaryForm.SingerSearch.BopomofoSearch.cs

308 lines
13 KiB
C#
Raw Normal View History

2025-04-07 16:54:10 +08:00
using System.IO;
namespace DualScreenDemo
{
public partial class PrimaryForm
{
private PictureBox pictureBoxZhuYinSingers;
private Button[] phoneticButtonsForSingers;
private Button modifyButtonZhuYinSingers;
private Button clearButtonZhuYinSingers;
private Button closeButtonZhuYinSingers;
private RichTextBox inputBoxZhuYinSingers;
private void InitializeButtonsForZhuYinSingers()
2025-04-07 16:54:10 +08:00
{
InitializePhoneticSymbolSingerBtns(pictureBoxZhuYinSingers, PhoneticButton_Click);
// 初始化注音歌手的輸入框
InitializeInputBoxZhuYinSingers();
InitializeBopomofoSingersButton();
2025-04-07 16:54:10 +08:00
}
private void InitializeBopomofoSingersButton()
2025-04-07 16:54:10 +08:00
{
var data = LoadBtnConfigData();
2025-06-17 09:31:00 +08:00
modifyButtonZhuYinSingers = new Button { Name = "modifyButtonZhuYinSingers" };
ConfigureButton(modifyButtonZhuYinSingers, 650, 275, 72, 67,
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesZhuYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesZhuYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesZhuYin"]["mouseDown"])),
ModifyButtonZhuYinSingers_Click);
2025-04-07 16:54:10 +08:00
pictureBoxZhuYinSingers.Controls.Add(modifyButtonZhuYinSingers);
2025-04-07 16:54:10 +08:00
clearButtonZhuYinSingers = new Button { Name = "clearButtonZhuYinSingers" };
ConfigureButton(clearButtonZhuYinSingers, 8, 275, 72, 67,
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesZhuYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesZhuYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesZhuYin"]["mouseDown"])),
ClearButtonZhuYinSingers_Click);
2025-04-07 16:54:10 +08:00
pictureBoxZhuYinSingers.Controls.Add(clearButtonZhuYinSingers);
2025-04-07 16:54:10 +08:00
closeButtonZhuYinSingers = new Button { Name = "closeButtonZhuYinSingers" };
ConfigureButton(closeButtonZhuYinSingers, 730, 275, 72, 67,
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesZhuYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesZhuYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesZhuYin"]["mouseDown"])),
CloseButtonZhuYinSingers_Click);
2025-04-07 16:54:10 +08:00
pictureBoxZhuYinSingers.Controls.Add(closeButtonZhuYinSingers);
}
2025-04-07 16:54:10 +08:00
private void InitializePhoneticSymbolSingerBtns(Control control, EventHandler handler)
2025-04-07 16:54:10 +08:00
{
phoneticButtonsForSingers = new Button[35];
2025-04-07 16:54:10 +08:00
// 設置上排按鈕
int x = 8;
for (int i = 0; i < 10; i++)
2025-04-07 16:54:10 +08:00
{
CreatePhoneticSymbolSingerBtns(i, x, 65, control, handler);
x += 80;
2025-04-07 16:54:10 +08:00
}
x = 8;
for (int i = 10; i < 20; i++)
2025-04-07 16:54:10 +08:00
{
CreatePhoneticSymbolSingerBtns(i, x, 135, control, handler);
x += 80;
2025-04-07 16:54:10 +08:00
}
x = 40;
for (int i = 20; i < 29; i++)
2025-04-07 16:54:10 +08:00
{
CreatePhoneticSymbolSingerBtns(i, x, 205, control, handler);
x += 80;
}
// 設置下排按鈕
x = 88;
for (int i = 29; i < 32; i++)
{
CreatePhoneticSymbolSingerBtns(i, x, 275, control, handler);
x += 80;
}
x += 80;
for (int i = 32; i < 35; i++)
{
CreatePhoneticSymbolSingerBtns(i, x, 275, control, handler);
x += 80;
2025-04-07 16:54:10 +08:00
}
}
private void CreatePhoneticSymbolSingerBtns(int index, int x, int y, Control control, EventHandler handler)
2025-04-07 16:54:10 +08:00
{
try
{
// 加載配置數據
var data = LoadBtnConfigData();
2025-04-07 16:54:10 +08:00
// 創建語音按鈕並設置其屬性
phoneticButtonsForSingers[index] = new Button
{
Name = $"phoneticButtonsForSongs_{ButtonsPhoneticSymbols[index]}", // 按鈕名稱設為語音符號名稱
2025-04-07 16:54:10 +08:00
};
if (index == 31)
{
ConfigureButton(phoneticButtonsForSingers[index], x, y, 154, 67,
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_normal"])),
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_mouseDown"])),
handler);
}
else
{
ConfigureButton(phoneticButtonsForSingers[index], x, y, 72, 67,
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_normal"])),
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["PhoneticButtonImages"][$"button{index}_mouseDown"])),
handler);
}
2025-04-07 16:54:10 +08:00
// 設置按鈕的 Tag 屬性為對應的語音符號
phoneticButtonsForSingers[index].Tag = ButtonsPhoneticSymbols[index];
2025-04-07 16:54:10 +08:00
// 將按鈕添加到表單的控制項集合中
control.Controls.Add(phoneticButtonsForSingers[index]);
2025-04-07 16:54:10 +08:00
}
catch (Exception ex)
{
Console.WriteLine($"Error creating button at index {index}: {ex.Message}");
}
}
// 初始化 ZhuYin 歌手的輸入框,並設定其屬性與事件處理程序。
2025-04-07 16:54:10 +08:00
private void InitializeInputBoxZhuYinSingers()
{
try
{
string fontName = "Times New Roman";
float fontSize = 26;
FontStyle fontStyle = FontStyle.Regular;
Color foreColor = Color.Black;
2025-04-07 16:54:10 +08:00
inputBoxZhuYinSingers = new RichTextBox
{
Name = "inputBoxZhuYinSongs",
ForeColor = foreColor, // 設定文字顏色
Font = new Font(fontName, fontSize / 900 * Screen.PrimaryScreen.Bounds.Height, fontStyle),
ScrollBars = RichTextBoxScrollBars.None // 禁用滾動條
2025-04-07 16:54:10 +08:00
};
// 調整和定位輸入框的位置及大小
ResizeAndPositionControl(inputBoxZhuYinSingers, 10, 12, 455, 47);
2025-04-07 16:54:10 +08:00
// 將輸入框加入到窗體的控件集合中
pictureBoxZhuYinSingers.Controls.Add(inputBoxZhuYinSingers);
2025-04-07 16:54:10 +08:00
}
catch (Exception ex)
{
// 如果初始化過程中出現錯誤,則在控制台輸出錯誤信息
Console.WriteLine("Error initializing inputBoxZhuYinSingers: " + ex.Message);
}
}
// 顯示圖片並根據配置文件設置顯示區域的大小和位置。
2025-04-07 16:54:10 +08:00
private void ShowImageOnPictureBoxZhuYinSingers(string imagePath)
{
// 加載原始圖片
Bitmap originalImage = new Bitmap(imagePath);
// 設置圖片到 PictureBox
pictureBoxZhuYinSingers.Image = originalImage;
// 調整 PictureBox 大小和位置
ResizeAndPositionPictureBox(pictureBoxZhuYinSingers, 390, 360, 808, 356);
2025-04-07 16:54:10 +08:00
// 顯示圖片
pictureBoxZhuYinSingers.Visible = true;
}
// 設置注音歌手相關控制項(包括圖片框、按鈕和輸入框)的顯示或隱藏狀態。
2025-04-07 16:54:10 +08:00
private void SetZhuYinSingersAndButtonsVisibility(bool isVisible)
{
// 定義一個動作來處理控制項的顯示或隱藏
System.Action action = () =>
{
try
{
// 暫停控制項佈局的重新排版,提高效率
SuspendLayout();
if (isVisible) SetUIVisible(pictureBoxZhuYinSingers);
else CloseUI(pictureBoxZhuYinSingers);
2025-04-07 16:54:10 +08:00
ResumeLayout();
PerformLayout();
2025-04-07 16:54:10 +08:00
}
catch (Exception ex)
{
Console.WriteLine("Error in SetZhuYinSingersAndButtonsVisibility: " + ex.Message);
}
};
// 檢查是否需要在主執行緒外執行
if (this.InvokeRequired)
{
this.Invoke(action); // 如果需要,透過主執行緒執行
}
else
{
action(); // 否則直接執行
}
}
private void ZhuyinSearchSingersButton_Click(object sender, EventArgs e)
{
// 設定按鈕背景,將「注音搜尋」設為啟動狀態,其餘按鈕恢復為正常狀態
UpdateSSearchBtn(zhuyinSearchButton, zhuyinSearchActiveBackground);
// 載入設定檔,取得圖片路徑資訊
var configData = LoadBtnConfigData();
// 取得「注音歌手圖片」的完整路徑
string imagePath = Path.Combine(serverPath, configData["ImagePaths"]["ZhuYinSingers"]);
// 在 PictureBox 中顯示對應的「注音歌手」圖片
ShowImageOnPictureBoxZhuYinSingers(Path.Combine(serverPath, imagePath));
// 設定不同搜尋模式的 UI 控件可見性
SetEnglishSingersAndButtonsVisibility(false); // 隱藏英文字母搜尋相關控件
SetPinYinSingersAndButtonsVisibility(false); // 隱藏拼音搜尋相關控件
SetHandWritingForSingersAndButtonsVisibility(false); // 隱藏手寫搜尋相關控件
SetWordCountSingersAndButtonsVisibility(false); // 隱藏字數搜尋相關控件
SetZhuYinSingersAndButtonsVisibility(true); // 顯示注音搜尋相關控件
//SetPictureBoxArtistSearchAndButtonsVisibility(false); // 隱藏其他搜尋模式的圖片框
ResetinputBox(); // 重置輸入框
// 顯示「注音歌手搜尋」的圖片框
pictureBoxZhuYinSingers.Visible = true;
}
2025-09-01 17:48:16 +08:00
private void PhoneticButton_Click(object sender, EventArgs e)
{
var button = sender as Button;
if (button != null && button.Tag != null)
{
if (inputBoxZhuYinSingers.Visible)
{
inputBoxZhuYinSingers.Text += button.Tag.ToString();
}
else if (inputBoxZhuYinSongs.Visible)
{
inputBoxZhuYinSongs.Text += button.Tag.ToString();
}
}
}
private void ModifyButtonZhuYinSingers_Click(object sender, EventArgs e)
{
// 如果輸入框不為空,且包含輸入內容,則刪除最後一個字符
if (pictureBoxZhuYinSingers.Controls.Contains(inputBoxZhuYinSingers) && inputBoxZhuYinSingers.Text.Length > 0)
{
inputBoxZhuYinSingers.Text = inputBoxZhuYinSingers.Text.Substring(0, inputBoxZhuYinSingers.Text.Length - 1);
}
}
private void ClearButtonZhuYinSingers_Click(object sender, EventArgs e)
{
// 如果輸入框不為空,則清空該框的文本內容
if (pictureBoxZhuYinSingers.Controls.Contains(inputBoxZhuYinSingers) && inputBoxZhuYinSingers.Text.Length > 0)
{
inputBoxZhuYinSingers.Text = "";
}
}
private void CloseButtonZhuYinSingers_Click(object sender, EventArgs e)
{
// 隱藏 ZhuYin 歌手圖片框
pictureBoxZhuYinSingers.Visible = false;
// 關閉注音搜尋的按鈕顏色
zhuyinSearchButton.BackgroundImage = zhuyinSearchNormalBackground;
FindZhuYiSingers();
// 隱藏與 ZhuYin 歌手相關的所有按鈕
SetZhuYinSingersAndButtonsVisibility(false);
}
private void FindZhuYiSingers()
{
string searchText = inputBoxZhuYinSingers.Text;
string query = string.IsNullOrWhiteSpace(searchText)
? "SELECT * FROM artists LIMIT 1000;"
: $"SELECT * FROM artists WHERE `phonetic_abbr` 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);
}
2025-04-07 16:54:10 +08:00
}
}