吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1073|回复: 10
收起左侧

[求助] c#小白请教各位大佬一个问题

[复制链接]
真的小白 发表于 2020-8-31 21:49
请问一下各位大佬,图片中是一个继承自 Component 类的一个组件类,有一个 Control 类的自动属性 TargetControl 。在设计器添加了这个组件,并且设置 TargetControl 的值为窗体上的一个 Panel 。当程序运行时,应该怎么避免出现图中的异常?


无标题.png

[C#] 纯文本查看 复制代码
public class DragControlMoveForm : Component
	{
		public Control TargetControl { get; set; }

		public DragControlMoveForm()
		{
			TargetControl.MouseDown += TargetControl_MouseDown;
		}

		private void TargetControl_MouseDown(object sender, MouseEventArgs e)
		{
			if (e.Button == MouseButtons.Left)
			{
				BaseTool.DragMove(TargetControl);
			}
		}
	}

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

goldli 发表于 2020-8-31 23:05
本帖最后由 goldli 于 2020-8-31 23:07 编辑

private TargetControl  _target;

publick TargetControl  TargetControl  
{
   get => _target;
  set =>{
     if (value != null && !value.equals(_target))
     {
        _target = value;
        _target.xxxx = xxxxx;
     }
   }
}

免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
真的小白 + 1 + 1 谢谢@Thanks!

查看全部评分

zixuan203344 发表于 2020-8-31 22:05
这个属性要具体实例化对象才能设置吧,你这直接写到构造函数里面,是不是不对?
hackgsl 发表于 2020-8-31 22:07
TargetControl.MouseDown += TargetControl_MouseDown;换成:
TargetControl.MouseDown(null,null);呢
 楼主| 真的小白 发表于 2020-8-31 22:21
zixuan203344 发表于 2020-8-31 22:05
这个属性要具体实例化对象才能设置吧,你这直接写到构造函数里面,是不是不对?

实例化后,在这个类里面使用的就成了刚刚实例化的那个了,而不是传入的 Panel 组件了。。。
momosys 发表于 2020-8-31 22:21
构造函数中需要先调用
InitializeComponent();方法初始化窗口控件才能继续其他操作

public DragControlMoveForm()
{
InitializeComponent();
TargetControl.MouseDown += TargetControl_MouseDown;
}


 楼主| 真的小白 发表于 2020-8-31 22:31
momosys 发表于 2020-8-31 22:21
构造函数中需要先调用
InitializeComponent();方法初始化窗口控件才能继续其他操作

嗯嗯,我也隐约感觉到有点不对劲了,但还是摸不着头脑。
这是个非可视化组件,没有 InitializeComponent() 方法。。。

无标题1.png
bookaccount 发表于 2020-8-31 22:40
不知道你是怎么调用的。避免出错很简单,加个判断:
        public DragControlMoveForm()
        {
            if (TargetControl != null)
            {
                 TargetControl.MouseDown += TargetControl_MouseDown;
            }
        }
jajazhou 发表于 2020-8-31 22:49
bookaccount 发表于 2020-8-31 22:40
不知道你是怎么调用的。避免出错很简单,加个判断:
        public DragControlMoveForm()
        {

是的,当你设计状态,TargetControl没有赋值的时候,就是null, 加个判断即可
 楼主| 真的小白 发表于 2020-8-31 22:52
bookaccount 发表于 2020-8-31 22:40
不知道你是怎么调用的。避免出错很简单,加个判断:
        public DragControlMoveForm()
        {

加个判断是可以避免出错,但是新的问题又出现了。
不管是否实例化 TargetControl ,它始终接收不到我在属性面板里设置的 panel1 对象了。
我的想法很简单,就是在 DragControlMoveForm 这个非可视化组件类里,定义一个 Control 类型的 TargetControl 属性,用来接收需要执行操作的组件,然后传进来的那个组件的操作就在这个类里实现。
现在的问题是,传进来的是个 null ,传不进来。。。。。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-30 01:03

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表