c#小白请教各位大佬一个问题
请问一下各位大佬,图片中是一个继承自 Component 类的一个组件类,有一个 Control 类的自动属性 TargetControl 。在设计器添加了这个组件,并且设置 TargetControl 的值为窗体上的一个 Panel 。当程序运行时,应该怎么避免出现图中的异常?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:07 编辑
private TargetControl_target;
publick TargetControlTargetControl
{
get => _target;
set =>{
if (value != null && !value.equals(_target))
{
_target = value;
_target.xxxx = xxxxx;
}
}
} 这个属性要具体实例化对象才能设置吧,你这直接写到构造函数里面,是不是不对? TargetControl.MouseDown += TargetControl_MouseDown;换成:
TargetControl.MouseDown(null,null);呢 zixuan203344 发表于 2020-8-31 22:05
这个属性要具体实例化对象才能设置吧,你这直接写到构造函数里面,是不是不对?
实例化后,在这个类里面使用的就成了刚刚实例化的那个了,而不是传入的 Panel 组件了。。。 构造函数中需要先调用
InitializeComponent();方法初始化窗口控件才能继续其他操作
public DragControlMoveForm()
{
InitializeComponent();
TargetControl.MouseDown += TargetControl_MouseDown;
}
momosys 发表于 2020-8-31 22:21
构造函数中需要先调用
InitializeComponent();方法初始化窗口控件才能继续其他操作
嗯嗯,我也隐约感觉到有点不对劲了,但还是摸不着头脑。
这是个非可视化组件,没有 InitializeComponent() 方法。。。
不知道你是怎么调用的。避免出错很简单,加个判断:
public DragControlMoveForm()
{
if (TargetControl != null)
{
TargetControl.MouseDown += TargetControl_MouseDown;
}
} bookaccount 发表于 2020-8-31 22:40
不知道你是怎么调用的。避免出错很简单,加个判断:
public DragControlMoveForm()
{
是的,当你设计状态,TargetControl没有赋值的时候,就是null, 加个判断即可 bookaccount 发表于 2020-8-31 22:40
不知道你是怎么调用的。避免出错很简单,加个判断:
public DragControlMoveForm()
{
加个判断是可以避免出错,但是新的问题又出现了。
不管是否实例化 TargetControl ,它始终接收不到我在属性面板里设置的 panel1 对象了。
我的想法很简单,就是在 DragControlMoveForm 这个非可视化组件类里,定义一个 Control 类型的 TargetControl 属性,用来接收需要执行操作的组件,然后传进来的那个组件的操作就在这个类里实现。
现在的问题是,传进来的是个 null ,传不进来。。。。。。。
页:
[1]
2