我正在制作N * M尺寸的SUDOKU游戏。每个号码都在一个按钮上。 当程序启动时,所有按钮都是空的,我想如果我点击一个按钮就可以在它上面做一个小面板,每个数字的按钮可以选择一个。
private void adatB_Click(object sender, EventArgs e)
{
Button button = sender as Button;
int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray();
Panel szamok = new Panel
{
Location = MousePosition,
Size = new Size(100, 100)
};
Controls.Add(szamok);
TableLayoutPanel minitabla = new TableLayoutPanel
{
Dock = DockStyle.Fill,
ColumnCount = szorzat,
RowCount = szorzat,
};
for (int i = 0; i < szorzat; i++)
{
minitabla.RowStyles.Add(new RowStyle(SizeType.Percent, 100F));
minitabla.ColumnStyles.Add(new ColumnStyle(SizeType.Percent, 100F));
}
szamok.Controls.Add(minitabla);
Button[,] szamokB = new Button[meret[0], meret[1]];
int d = 1;
for (int i = 0; i < meret[0]; i++)
{
for (int j = 0; j < meret[1]; j++)
{
szamokB[i, j] = new Button();
szamokB[i, j].Tag= hely[0]+","+hely[1];
szamokB[i, j].Text = d.ToString();
szamokB[i, j].Dock = DockStyle.Fill;
szamokB[i, j].Click += szamokB_Click;
minitabla.Controls.Add(szamokB[i, j], i, j);
d++;
}
}
}
private void szamokB_Click(object sender, EventArgs e)
{
Button button = sender as Button;
int[] hely = button.Tag.ToString().Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries).Select(Int32.Parse).ToArray();
adatB[hely[0], hely[1]].Text = button.Text;
}
单击按钮时未显示窗格的问题。 meret [0]变量是N,meret [1]是M,adatB是按钮的arry,标签中有positons。 如果我选择了这个号码怎么能关闭那个小组?
答案 0 :(得分:1)
首先,您应该正确计算鼠标位置。
来自MSDN:
获取鼠标光标在屏幕坐标中的位置。
你应该使用这样的东西:
export default class Parent extends Component {
construtor(props) {
super(props);
}
viewData = () => {
window.open('childcomponent.js','Data','height=250,width=250');
}
render() {
return (
<div> <a onclick={this.viewData}>View Data</a></div>
)
}
}
您可能需要这样做,将您的面板放在前面:
Location = new Point(MousePosition.X - this.Location.X, MousePosition.Y - this.Location.Y)
要关闭面板,您可以存储选择器面板,稍后可以从控件中将其删除,使用如下内容:
Controls.Add(szamok);
szamok.BringToFront();