InkCanvasForClass/Ink Canvas/RandWindow.xaml.cs
2023-05-17 21:51:13 +08:00

239 lines
8.7 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 Microsoft.VisualBasic;
using ModernWpf.Controls;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;
using System.Windows;
using System.Windows.Input;
namespace Ink_Canvas
{
/// <summary>
/// Interaction logic for RandWindow.xaml
/// </summary>
public partial class RandWindow : Window
{
public RandWindow()
{
InitializeComponent();
}
public RandWindow(bool IsAutoClose)
{
InitializeComponent();
isAutoClose = IsAutoClose;
new Thread(new ThreadStart(() =>
{
Thread.Sleep(100);
Application.Current.Dispatcher.Invoke(() =>
{
BorderBtnRand_MouseUp(BorderBtnRand, null);
});
})).Start();
}
public static int randSeed = 0;
public bool isAutoClose = false;
public int TotalCount = 1;
public int PeopleCount = 60;
public List<string> Names = new List<string>();
private void BorderBtnAdd_MouseUp(object sender, MouseButtonEventArgs e)
{
if (TotalCount >= PeopleCount) return;
TotalCount++;
LabelNumberCount.Content = TotalCount.ToString();
SymbolIconStart.Symbol = Symbol.People;
}
private void BorderBtnMinus_MouseUp(object sender, MouseButtonEventArgs e)
{
if (TotalCount < 2) return;
TotalCount--;
LabelNumberCount.Content = TotalCount.ToString();
if (TotalCount == 1)
{
SymbolIconStart.Symbol = Symbol.Contact;
}
}
private void BorderBtnRand_MouseUp(object sender, MouseButtonEventArgs e)
{
Random random = new Random();// randSeed + DateTime.Now.Millisecond / 10 % 10);
string outputString = "";
List<string> outputs = new List<string>();
List<int> rands = new List<int>();
LabelOutput2.Visibility = Visibility.Collapsed;
LabelOutput3.Visibility = Visibility.Collapsed;
BorderBtnRandCover.Visibility = Visibility.Visible;
new Thread(new ThreadStart(() =>
{
for (int i = 0; i < 5; i++)
{
int rand = random.Next(1, PeopleCount + 1);
while (rands.Contains(rand))
{
rand = random.Next(1, PeopleCount + 1);
}
rands.Add(rand);
if (rands.Count >= PeopleCount) rands = new List<int>();
Application.Current.Dispatcher.Invoke(() =>
{
if (Names.Count != 0)
{
LabelOutput.Content = Names[rand - 1];
}
else
{
LabelOutput.Content = rand.ToString();
}
});
Thread.Sleep(150);
}
rands = new List<int>();
Application.Current.Dispatcher.Invoke(() =>
{
for (int i = 0; i < TotalCount; i++)
{
int rand = random.Next(1, PeopleCount + 1);
while (rands.Contains(rand))
{
rand = random.Next(1, PeopleCount + 1);
}
rands.Add(rand);
if (rands.Count >= PeopleCount) rands = new List<int>();
if (Names.Count != 0)
{
outputs.Add(Names[rand - 1]);
outputString += Names[rand - 1] + Environment.NewLine;
}
else
{
outputs.Add(rand.ToString());
outputString += rand.ToString() + Environment.NewLine;
}
}
if (TotalCount <= 5)
{
LabelOutput.Content = outputString.ToString().Trim();
}
else if (TotalCount <= 10)
{
LabelOutput2.Visibility = Visibility.Visible;
outputString = "";
for (int i = 0; i < (outputs.Count + 1) / 2; i++)
{
outputString += outputs[i].ToString() + Environment.NewLine;
}
LabelOutput.Content = outputString.ToString().Trim();
outputString = "";
for (int i = (outputs.Count + 1) / 2; i < outputs.Count; i++)
{
outputString += outputs[i].ToString() + Environment.NewLine;
}
LabelOutput2.Content = outputString.ToString().Trim();
}
else
{
LabelOutput2.Visibility = Visibility.Visible;
LabelOutput3.Visibility = Visibility.Visible;
outputString = "";
for (int i = 0; i < (outputs.Count + 1) / 3; i++)
{
outputString += outputs[i].ToString() + Environment.NewLine;
}
LabelOutput.Content = outputString.ToString().Trim();
outputString = "";
for (int i = (outputs.Count + 1) / 3; i < (outputs.Count + 1) * 2 / 3; i++)
{
outputString += outputs[i].ToString() + Environment.NewLine;
}
LabelOutput2.Content = outputString.ToString().Trim();
outputString = "";
for (int i = (outputs.Count + 1) * 2 / 3; i < outputs.Count; i++)
{
outputString += outputs[i].ToString() + Environment.NewLine;
}
LabelOutput3.Content = outputString.ToString().Trim();
}
BorderBtnRandCover.Visibility = Visibility.Collapsed;
if (isAutoClose)
{
new Thread(new ThreadStart(() =>
{
Thread.Sleep(1500);
Application.Current.Dispatcher.Invoke(() =>
{
Close();
});
})).Start();
}
});
})).Start();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Names = new List<string>();
if (File.Exists(App.RootPath + "Names.txt"))
{
string[] fileNames = File.ReadAllLines(App.RootPath + "Names.txt");
string[] replaces = new string[0];
if (File.Exists(App.RootPath + "Replace.txt"))
{
replaces = File.ReadAllLines(App.RootPath + "Replace.txt");
}
//Fix emtpy lines
foreach (string str in fileNames)
{
string s = str;
//Make replacement
foreach (string replace in replaces)
{
if (s == Strings.Left(replace, replace.IndexOf("-->")))
{
s = Strings.Mid(replace, replace.IndexOf("-->") + 4);
}
}
if (s != "") Names.Add(s);
}
PeopleCount = Names.Count();
TextBlockPeopleCount.Text = PeopleCount.ToString();
if (PeopleCount == 0)
{
PeopleCount = 60;
TextBlockPeopleCount.Text = "点击此处以导入名单";
}
}
}
private void BorderBtnHelp_MouseUp(object sender, MouseButtonEventArgs e)
{
//MessageBox.Show("如需显示姓名,请在程序目录下新建 Names.txt并将姓名输入一行一个。");
new NamesInputWindow().ShowDialog();
Window_Loaded(this, null);
}
private void BtnClose_MouseUp(object sender, MouseButtonEventArgs e)
{
Close();
}
}
}