如何在 winforms 中的标签上打印多行
How do I print multiple lines on a label in win forms
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private int n;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string scrambledWord = textBox1.Text;
if (e.KeyCode == Keys.Enter)
{
label3.Text = scrambledWord;
int n = scrambledWord.Length;
permute(scrambledWord, 0, n - 1);
}
}
private void permute(String scrambledWord,
int l, int r)
{
if (l == r)
label3.Text = scrambledWord;
else
{
for (int i = l; i <= r; i++)
{
scrambledWord = swap(scrambledWord, l, i);
permute(scrambledWord, l + 1, r);
scrambledWord = swap(scrambledWord, l, i);
}
}
}
/**
* Swap Characters at position
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public static String swap(String a,
int i, int j)
{
char temp;
char[] charArray = a.ToCharArray();
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
string s = new string(charArray);
return s;
}
}
}
它只打印排列的第一行,我希望它打印所有排列。我是 WinForms 的新手。请帮助,谢谢!
您可以试试下面的代码,使用Environment.Newline()来显示标签中的所有排列。
首先,我们需要将 label.AutoSize 设置为 false。
其次,这里有一个代码示例,您可以参考。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string scrambledWord = textBox1.Text;
if (e.KeyCode == Keys.Enter)
{
label1.Text ="";
char[] arr = scrambledWord.ToCharArray();
GetPer(arr);
}
}
public void GetPer(char[] list)
{
int x = list.Length - 1;
GetPer(list, 0, x);
}
private void GetPer(char[] list, int k, int m)
{
if (k == m)
{
Console.WriteLine(list);
var text = new string(list);
label1.Text = label1.Text + text + Environment.NewLine;
}
else
for (int i = k; i <= m; i++)
{
Swap(ref list[k], ref list[i]);
GetPer(list, k + 1, m);
Swap(ref list[k], ref list[i]);
}
}
private void Swap(ref char a, ref char b)
{
if (a == b) return;
var temp = a;
a = b;
b = temp;
}
private void label1_TextChanged(object sender, EventArgs e)
{
label1.Height = label1.Height + 10;
}
结果:
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
private int n;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string scrambledWord = textBox1.Text;
if (e.KeyCode == Keys.Enter)
{
label3.Text = scrambledWord;
int n = scrambledWord.Length;
permute(scrambledWord, 0, n - 1);
}
}
private void permute(String scrambledWord,
int l, int r)
{
if (l == r)
label3.Text = scrambledWord;
else
{
for (int i = l; i <= r; i++)
{
scrambledWord = swap(scrambledWord, l, i);
permute(scrambledWord, l + 1, r);
scrambledWord = swap(scrambledWord, l, i);
}
}
}
/**
* Swap Characters at position
* @param a string value
* @param i position 1
* @param j position 2
* @return swapped string
*/
public static String swap(String a,
int i, int j)
{
char temp;
char[] charArray = a.ToCharArray();
temp = charArray[i];
charArray[i] = charArray[j];
charArray[j] = temp;
string s = new string(charArray);
return s;
}
}
}
它只打印排列的第一行,我希望它打印所有排列。我是 WinForms 的新手。请帮助,谢谢!
您可以试试下面的代码,使用Environment.Newline()来显示标签中的所有排列。
首先,我们需要将 label.AutoSize 设置为 false。
其次,这里有一个代码示例,您可以参考。
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
string scrambledWord = textBox1.Text;
if (e.KeyCode == Keys.Enter)
{
label1.Text ="";
char[] arr = scrambledWord.ToCharArray();
GetPer(arr);
}
}
public void GetPer(char[] list)
{
int x = list.Length - 1;
GetPer(list, 0, x);
}
private void GetPer(char[] list, int k, int m)
{
if (k == m)
{
Console.WriteLine(list);
var text = new string(list);
label1.Text = label1.Text + text + Environment.NewLine;
}
else
for (int i = k; i <= m; i++)
{
Swap(ref list[k], ref list[i]);
GetPer(list, k + 1, m);
Swap(ref list[k], ref list[i]);
}
}
private void Swap(ref char a, ref char b)
{
if (a == b) return;
var temp = a;
a = b;
b = temp;
}
private void label1_TextChanged(object sender, EventArgs e)
{
label1.Height = label1.Height + 10;
}
结果: