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

285 lines
12 KiB
C#

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);
}
}
}