C# ';对象';不包含';价值';
我正在构建一个函数来减少18个按钮的相同代码 代码如下:C# ';对象';不包含';价值';,c#,C#,我正在构建一个函数来减少18个按钮的相同代码 代码如下: void hexagon_Click(object sender, ActionEventArgs e) { count++; this.Dispatcher.Invoke((Action)(() => { sender.RectOne.Fill = sender.Brush; sender.RectTwo.Fill = send
void hexagon_Click(object sender, ActionEventArgs e)
{
count++;
this.Dispatcher.Invoke((Action)(() =>
{
sender.RectOne.Fill = sender.Brush;
sender.RectTwo.Fill = sender.Brush;
sender.RectThree.Fill = sender.Brush;
}));
if (count == 1)
{
kliknatopole = sender;
}
else if (count == 2)
{
if (kliknatopole == sender)
{
return;
}
else
{
if (kliknatopole.Brush == sender.brush)
{
levelUpControUI(level);
prepareForNextLevel();
nextLevel1();
count = 0;
sender.Enabled = false;
kliknatopole.Enabled = false;
}
else
{
this.Dispatcher.Invoke((Action)(() =>
{
sender.RectOne.Fill = sender.Brush;
sender.RectTwo.Fill = sender.Brush;
sender.RectThree.Fill = sender.Brush;
}));
Thread.Sleep(500);
this.Dispatcher.Invoke((Action)(() =>
{
sender.RectOne.Fill = Brushes.Transparent;
sender.RectTwo.Fill = Brushes.Transparent;
sender.RectThree.Fill = Brushes.Transparent;
kliknatopole.RectOne.Fill = Brushes.Transparent;
kliknatopole.RectTwo.Fill = Brushes.Transparent;
kliknatopole.RectThree.Fill = Brushes.Transparent;
}));
toLevelOne();
count = 0;
}
}
}
}
现在我不知道为什么,但是kliknatopole
这是一个私有对象
和发送方
无法访问类六边形控件的值,这里是:
public partial class HexagonControl : UserControl
{
public BaseControlLogic controlLogic { get; set; }
public HexagonControl()
{
InitializeComponent();
controlLogic = new BaseControlLogic();
}
public Rectangle RectOne { get { return rectOne; } }
public Rectangle RectTwo { get { return rectTwo; } }
public Rectangle RectThree { get { return rectThree; } }
public Brush Brush { set; get; }
}
对于RectOne、Two和Three以及Brush
,我得到以下错误:
“object”不包含“RectOne”的定义,并且找不到接受“object”类型的第一个参数的扩展方法“RectOne”
我把HexagonControl
作为公共控件,但这并没有解决它。我还尝试创建一个对象
并将发送方
值传入,但这仍然没有解决问题,它只是给了我一个无法隐式地将类型“object”转换为“LongName.HexagonControl”。存在显式转换
什么可能导致此错误,以及如何修复它。只需将发送方
转换为其原始类型:
((HexagonControl)sender).RectOne.Fill = ((HexagonControl)sender).Brush;
当然,对于其他8种用法,您也必须这样做只需将发送方
转换为其原始类型:
((HexagonControl)sender).RectOne.Fill = ((HexagonControl)sender).Brush;
当然,对于其他8种用法,您也必须这样做您必须将sender
转换为HexagonControl
类型或将其值发送给另一个HexagonControl
类型变量。请尝试以下操作:
void hexagon_Click(object sender, ActionEventArgs e)
{
if(sender.GetType() != typeof(HexagonControl))
return;
count++;
HexagonControl realSender = (HexagonControl) sender;
[...]
并在方法的其余部分使用realssender
而不是sender
。这种方法可以防止异常
,以防发送方
不是六边形控件
,只是为了预防
希望有帮助 您必须将sender
转换为HexagonControl
类型,或将其值发送给另一个HexagonControl
类型变量。请尝试以下操作:
void hexagon_Click(object sender, ActionEventArgs e)
{
if(sender.GetType() != typeof(HexagonControl))
return;
count++;
HexagonControl realSender = (HexagonControl) sender;
[...]
并在方法的其余部分使用realssender
而不是sender
。这种方法可以防止异常
,以防发送方
不是六边形控件
,只是为了预防
希望有帮助 您必须将sender
转换为其原始格式type@FlatEric这应该是一个答案,而不是一个评论在我的情况下,如何才能做到这一点。我是c#的新手,很抱歉,您必须将发送者
转换为其原始版本type@FlatEric这应该是一个答案,而不是一个评论在我的情况下,如何才能做到这一点。我是c#的新手,sorry@Xy您是否在所有使用sender
的情况下都这样做了?您是否也为kliknatopole
这样做了,因为它也是对sender
的引用,也是类型object
?是的,它仍然给了我相同的错误。我找到了解决方案,谢谢你的支持time@Xy您是否在所有使用sender
的情况下都这样做了?您是否也为kliknatopole
这样做了,因为它也是对sender
的引用,也是类型object
?是的,它仍然给了我相同的错误。我找到了解决方案,谢谢你的时间发送者部分得到修复,但现在我得到了这个:接线员!无法应用于'System.type'@Xy类型的opperand。尝试更改此的if行:if(sender.GetType()!=typeof(HexagonControl))
,我犯了一个错误,已经编辑了答案,对此表示抱歉。发送方部分得到了修复,但现在我得到了这个:运算符!无法应用于'System.type'@Xy类型的opperand。尝试更改此的if行:if(sender.GetType()!=typeof(HexagonControl))
,我犯了一个错误,已经编辑了答案,对此表示抱歉。