using System.IO;
namespace DualScreenDemo
{
public partial class PrimaryForm
{
// 拼音歌曲的 PictureBox
private PictureBox pictureBoxPinYinSongs;
// 存放拼音按鈕的陣列
private Button[] letterButtonsForPinYinSongs;
private string[] AlphabetSymbols=["Q","W","E","R","T","Y","U","I","O","P",
"A","S","D","F","G","H","J","K","L",
"Z","X","C","V","B","N","M"];
// 特殊功能按鈕(修改、清除、關閉)
private Button modifyButtonPinYinSongs;
private Button clearButtonPinYinSongs;
private Button closeButtonPinYinSongs;
// 用於顯示輸入文字的輸入框
private RichTextBox inputBoxPinYinSongs;
// 初始化拼音輸入相關的 UI 控件
private void InitializeButtonsForPinYinSongs()
{
InitializeInputBoxPinYinSongs();
InitializePinYinSongsButton();
InitializeAlphbtBtns(pictureBoxPinYinSongs,LetterButtonPinYinSongs_Click);
}
// 初始化拼音輸入框 (RichTextBox)
private void InitializeInputBoxPinYinSongs()
{
try
{
//字型設定
string fontName = "Times New Roman";
float fontSize = 26;
FontStyle fontStyle = FontStyle.Regular;
Color foreColor = Color.Black;
// 創建拼音輸入框 (RichTextBox)
inputBoxPinYinSongs = new RichTextBox
{
Visible = false, // 預設為隱藏
Name = "inputBoxPinYinSongs", // 設定控制項名稱
ForeColor = foreColor, // 設定文字顏色
Font = new Font(
fontName,
fontSize / 900 * Screen.PrimaryScreen.Bounds.Height, // 根據螢幕大小調整字體
fontStyle
)
};
// 設定輸入框的位置與大小
ResizeAndPositionControl(inputBoxPinYinSongs, 20,25, 448, 57);
pictureBoxPinYinSongs.Controls.Add(inputBoxPinYinSongs);
}
catch (Exception ex)
{
Console.WriteLine($"An error occurred: {ex.Message}");
}
}
private void InitializePinYinSongsButton()
{
var data = LoadBtnConfigData();
modifyButtonPinYinSongs = new Button { Name = "modifyButtonPinYinSongs" };
ConfigureButton(modifyButtonPinYinSongs, 650, 264, 72, 67,
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesPinYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesPinYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["ModifyButtonImagesPinYin"]["mouseDown"])),
ModifyButtonPinYinSongs_Click);
pictureBoxPinYinSongs.Controls.Add(modifyButtonPinYinSongs);
clearButtonPinYinSongs = new Button { Name = "clearButtonPinYinSongs" };
ConfigureButton(clearButtonPinYinSongs, 8, 264, 72, 67,
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesPinYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesPinYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["ClearButtonImagesPinYin"]["mouseDown"])),
ClearButtonPinYinSongs_Click);
pictureBoxPinYinSongs.Controls.Add(clearButtonPinYinSongs);
closeButtonPinYinSongs = new Button { Name = "closeButtonPinYinSongs" };
ConfigureButton(closeButtonPinYinSongs, 730, 264, 72, 67,
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesPinYin"]["normal"])),
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesPinYin"]["mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["CloseButtonImagesPinYin"]["mouseDown"])),
CloseButtonPinYinSongs_Click);
pictureBoxPinYinSongs.Controls.Add(closeButtonPinYinSongs);
}
private void InitializeAlphbtBtns(Control control, EventHandler handler)
{
// 初始化字母按鈕陣列,總共有 26 個按鈕
letterButtonsForPinYinSongs = new Button[26];
// 設置上排按鈕
int x = 8;
for (int i = 0; i < 10; i++)
{
CreateAlphbtBtns(i, x, 100, control, handler);
x += 80;
}
x = 40;
for (int i = 10; i < 19; i++)
{
CreateAlphbtBtns(i, x, 182, control, handler);
x += 80;
}
// 設置下排按鈕
x = 88;
for (int i = 19; i < 26; i++)
{
CreateAlphbtBtns(i, x, 264, control, handler);
x += 80;
}
}
private void CreateAlphbtBtns(int index, int x, int y,Control control,EventHandler handler)
{
try
{
// 加載配置數據
var data = LoadBtnConfigData();
// 創建語音按鈕並設置其屬性
letterButtonsForPinYinSongs[index] = new Button
{
Name = $"PinYinLetterButtons_{AlphabetSymbols[index]}", // 按鈕名稱設為語音符號名稱
};
ConfigureButton(letterButtonsForPinYinSongs[index], x, y, 72, 67,
new Bitmap(Path.Combine(serverPath, data["PinYinLetterButtonImages"][$"button{index}_normal"])),
new Bitmap(Path.Combine(serverPath, data["PinYinLetterButtonImages"][$"button{index}_mouseOver"])),
new Bitmap(Path.Combine(serverPath, data["PinYinLetterButtonImages"][$"button{index}_mouseDown"])),
handler);
// 設置按鈕的 Tag 屬性為對應的語音符號
letterButtonsForPinYinSongs[index].Tag = AlphabetSymbols[index];
// 將按鈕添加到表單的控制項集合中
control.Controls.Add(letterButtonsForPinYinSongs[index]);
}
catch (Exception ex)
{
Console.WriteLine($"Error creating button at index {index}: {ex.Message}");
}
}
// 顯示拼音歌曲圖片
// 圖片路徑
private void ShowImageOnPictureBoxPinYinSongs(string imagePath)
{
// 使用指定的圖片路徑建立 Bitmap 影像
Bitmap originalImage = new Bitmap(imagePath);
// 將載入的圖片設定為 pictureBoxPinYinSongs 的影像
pictureBoxPinYinSongs.Image = originalImage;
// 調整 PictureBox 的大小與位置
ResizeAndPositionPictureBox(pictureBoxPinYinSongs, 390, 360, 808, 356);
// 顯示 PictureBox
pictureBoxPinYinSongs.Visible = true;
}
// 設定拼音模式的 UI 是否可見
// 是否可見
private void SetPinYinSongsAndButtonsVisibility(bool isVisible)
{
// 定義一個委派 (Action),用於更新 UI 控件的可見性
System.Action action = () =>
{
SuspendLayout();
if (isVisible) SetUIVisible(pictureBoxPinYinSongs);
else CloseUI(pictureBoxPinYinSongs);
};
// 如果當前執行緒不是 UI 執行緒,則使用 Invoke 確保執行於 UI 執行緒
if (this.InvokeRequired)
{
this.Invoke(action);
}
else
{
action();
}
}
#region 按鈕點擊事件
// 拼音歌曲搜尋按鈕點擊事件
private void PinyinSearchSongsButton_Click(object sender, EventArgs e)
{
// 更新搜尋模式按鈕的背景圖
zhuyinSearchSongButton.BackgroundImage = zhuyinSearchSongNormalBackground;
englishSearchSongButton.BackgroundImage = englishSearchSongNormalBackground;
pinyinSearchSongButton.BackgroundImage = pinyinSearchSongActiveBackground;
wordCountSearchSongButton.BackgroundImage = wordCountSearchSongNormalBackground;
handWritingSearchSongButton.BackgroundImage = handWritingSearchSongNormalBackground;
numberSearchSongButton.BackgroundImage = numberSearchSongNormalBackground;
// 讀取 config.ini 並獲取拼音圖片的路徑
var configData = LoadBtnConfigData();
string pinyinImagePath = Path.Combine(serverPath, configData["ImagePaths"]["PinYinSongs"]);
// 顯示拼音歌曲圖片
ShowImageOnPictureBoxPinYinSongs(Path.Combine(serverPath, pinyinImagePath));
// 鍵盤UI介面顯示設定
SetWordCountSongsAndButtonsVisibility(false);
SetEnglishSongsAndButtonsVisibility(false);
SetPinYinSongsAndButtonsVisibility(true);
SetHandWritingForSongsAndButtonsVisibility(false);
SetSongIDSearchAndButtonsVisibility(false);
SetZhuYinSongsAndButtonsVisibility(false);
ResetinputBox();
pictureBoxPinYinSongs.Visible = true;
}
// 處理拼音按鈕點擊事件
private void LetterButtonPinYinSongs_Click(object sender, EventArgs e)
{
// 嘗試將觸發事件的物件轉換為 Button 類型
var button = sender as Button;
// 檢查按鈕是否為 null,並確保該按鈕的 Tag 屬性不為 null
if (button != null && button.Tag != null)
{
// 確保輸入框 (inputBoxPinYinSongs) 是可見狀態
if (inputBoxPinYinSongs.Visible)
{
// 將按鈕的標籤 (Tag) 轉換為字串,並附加到輸入框的文字內容中
inputBoxPinYinSongs.Text += button.Tag.ToString();
}
}
}
// 「修改」按鈕點擊事件:刪除拼音輸入框中的最後一個字母。
private void ModifyButtonPinYinSongs_Click(object sender, EventArgs e)
{
// 確保 inputBoxPinYinSongs 存在於視窗控制項集合內,且輸入框內有文字
if (pictureBoxPinYinSongs.Controls.Contains(inputBoxPinYinSongs) && inputBoxPinYinSongs.Text.Length > 0)
{
// 刪除輸入框內的最後一個字母
inputBoxPinYinSongs.Text = inputBoxPinYinSongs.Text.Substring(0, inputBoxPinYinSongs.Text.Length - 1);
}
}
// 當使用者點擊清除按鈕時,若輸入框存在且有內容,則將其清空。
private void ClearButtonPinYinSongs_Click(object sender, EventArgs e)
{
// 檢查視窗內是否包含 inputBoxPinYinSongs 控制項,且輸入框內是否有文字
if (pictureBoxPinYinSongs.Controls.Contains(inputBoxPinYinSongs) && inputBoxPinYinSongs.Text.Length > 0)
{
// 清空拼音輸入框的內容
inputBoxPinYinSongs.Text = "";
}
}
private void CloseButtonPinYinSongs_Click(object sender, EventArgs e)
{
// 隱藏拼音輸入的背景圖片 (可能是 UI 中的輸入框背景)
pictureBoxPinYinSongs.Visible = false;
pinyinSearchSongButton.BackgroundImage = pinyinSearchSongNormalBackground;
// 設定拼音輸入框與所有相關按鈕的可見性為 false
SetPinYinSongsAndButtonsVisibility(false);
FindPinYinSongs();
}
private void FindPinYinSongs(){
string searchText = inputBoxPinYinSongs.Text;
// 在這裡添加搜尋歌曲的邏輯
// 例如:根據輸入框的內容搜尋歌曲
string query = string.IsNullOrWhiteSpace(searchText)
? "SELECT * FROM song_library_cache ORDER BY song_id DESC LIMIT 1000;"
: $"SELECT * FROM song_library_cache WHERE pinyin_abbr LIKE '{searchText}%' ORDER BY `song_name` DESC;";
var searchResults = SearchSongs_Mysql(query);
// 重置分頁
currentPage = 0;
totalPages = (int)Math.Ceiling((double)searchResults.Count / itemsPerPage);
// 更新多頁面面板的內容
multiPagePanel.currentPageIndex = 0;
multiPagePanel.LoadSongs(searchResults);
}
#endregion
}
}