C# ';对象';不包含';价值';

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

我正在构建一个函数来减少18个按钮的相同代码

代码如下:

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))
,我犯了一个错误,已经编辑了答案,对此表示抱歉。