C# 如何在C中通过拖放在面板中传递背景色
我们有一个学校项目,我们需要一个C语言的项目策划人。我们用面板来可视化颜色。因此,我们在顶部有行可用颜色和x行数面板来猜测代码。其中X是圈数 我们需要实现一个拖放事件,其中用户将一种可用颜色拖动到猜测行中的面板。例如,用户单击并拖动一个红色到行中的面板,然后该面板的背景颜色需要更改为红色 这就是我到目前为止所做的:C# 如何在C中通过拖放在面板中传递背景色,c#,drag-and-drop,C#,Drag And Drop,我们有一个学校项目,我们需要一个C语言的项目策划人。我们用面板来可视化颜色。因此,我们在顶部有行可用颜色和x行数面板来猜测代码。其中X是圈数 我们需要实现一个拖放事件,其中用户将一种可用颜色拖动到猜测行中的面板。例如,用户单击并拖动一个红色到行中的面板,然后该面板的背景颜色需要更改为红色 这就是我到目前为止所做的: #region CreatePanels public void CreatePanelArrayColors(int aantalKleuren) {
#region CreatePanels
public void CreatePanelArrayColors(int aantalKleuren)
{
pa = new Panel[aantalKleuren];
for (int i = 0; i < pa.Length; i++) {
pa[i] = new Panel();
pa[i].Width = 40;
pa[i].Height = 40;
pa[i].Top = 18;
pa[i].Left = 6 + i * 46;
pa[i].Tag = i;
pa[i].MouseDown += paAC_MouseDown;
kleurenToewijzen(pa, (int)pa[i].Tag, i);
grpAvailColors.Controls.Add(pa[i]);
}
}
public void CreatePanelGuess(int nmbrColorsToGuess)
{
pa = new Panel[nmbrColorsToGuess];
for (rowNumber = 0; rowNumber < g.Turns; rowNumber++)
{
for (j = 0; j < pa.Length; j++)
{
pa[j] = new Panel();
pa[j].Width = 30;
pa[j].Height = 30;
pa[j].Top = (rowNumber * 30 + rowNumber * 3) + 3;
pa[j].Left = 3 + j * 36;
pa[j].BackColor = Color.LightGray;
pa[j].AllowDrop = true;
pa[j].DragEnter += paTG_DragEnter;
pa[j].DragDrop += paTG_DragDrop;
ActieveTeRadenRij(pa, j, rowNumber);
pnlColorsToGuess.Controls.Add(pa[j]);
}
for (int correctie = 0; correctie < pa.Length; correctie++)
{
pa[correctie] = new Panel();
pa[correctie].Width = 10;
pa[correctie].Height = 10;
pa[correctie].Top = (rowNumber * 30 + rowNumber * 3) + 30 / 2 - 1;
pa[correctie].Left = (3 + g.ColorsGuess * 36) + 10 + correctie * 18;
pa[correctie].BackColor = Color.Gray;
pa[correctie].AllowDrop = true;
pa[correctie].DragEnter += paTG_DragEnter;
pa[correctie].DragDrop += paTG_DragDrop;
pnlColorsToGuess.Controls.Add(pa[correctie]);
}
//bt[0] = new Button();
//bt[0].Top = (rowNumber * 50 + rowNumber * 3) + 50 / 2;
//bt[0].Left = (3 + g.ColorsGuess * 56) + 10 + g.ColorsGuess * 18 + 10;
//pnlColorsToGuess.Controls.Add(bt[0]);
}
CreateTryButton();
}
#region DragAndDrop
private void paTG_DragDrop(object sender, DragEventArgs e)
{
((Panel)e.Data.GetData(typeof(Panel))).Parent = (Panel)sender;
}
private void paTG_DragEnter(object sender, DragEventArgs e)
{
e.Effect = DragDropEffects.Move;
}
private void paAC_MouseDown(object sender, MouseEventArgs e)
{
Panel pnl = sender as Panel;
pnl.DoDragDrop(pnl, DragDropEffects.Move);
}
#endregion
问题是,当我们将一个面板拖到一行时,该面板将消失,颜色也不会改变。尝试这样做:
private void paTG_DragDrop(object sender, DragEventArgs e)
{
var data = e.Data.GetData(typeof(Color));
if(data != null)
((Panel)sender).BackColor = (Color)data;
}
private void paAC_MouseDown(object sender, MouseEventArgs e)
{
Panel pnl = sender as Panel;
if(pnl != null)
pnl.DoDragDrop(pnl.BackColor, DragDropEffects.Move);
}
与您的代码相比,差异如下:
我在paTG_DragDrop方法中使用Panel类的BackColor属性来更改其颜色。
我使用颜色作为数据进行拖动。
我假设源面板的BackColor属性填充了适当的颜色。如果你有不同的方法,它很容易改变。