我有一个datagridview。此datagridview具有海关datagridviewcolumns以及datagridviewtextboxcolumns等。第三方控件托管在每个单元中。因此,在设计datagridview时,在自定义单元格上,除非您处于单元格的编辑模式,否则无法显示内容。因此,为了实现要显示的单元格内容,我已经覆盖了绘制方法,以便在它们不处于编辑模式时绘制单元格。要在单元格中绘制的图像是通过绘制方法获得的,我使用像:
这样的块using (Bitmap bitmap = new Bitmap())
{
...
}
另外,要在windows窗体datagridview单元格中托管一个控件,我有一个实现IDataGridViewEditingControl的类。
public class a : third-party-component, IDataGridViewEditingControl
{
}
在应用程序的某个时刻,它崩溃说无法访问已处置的对象。 在代码中我没有处理任何对象,所以我不明白这一点。
从堆栈中看起来似乎错误是在上面指出的类中引发的,但它没有明确指出在哪里。
我确信这是由windows窗体datagridview单元格中托管的控件引起的。关于什么可能是问题的任何想法?
或者它可能与datagridviewtextboxcolumns有关?低于错误:
Cannot access a disposed object.
Object name: 'DataGridViewTextBoxEditingControl'.
Stack Trace:
at System.Windows.Forms.Control.CreateHandle()
at System.Windows.Forms.TextBoxBase.CreateHandle()
at System.Windows.Forms.Control.get_Handle()
at System.Windows.Forms.Control.GetSafeHandle(IWin32Window window)
at System.Windows.Forms.ToolTip.Hide(IWin32Window win)
at System.Windows.Forms.ToolTip.HideAllToolTips()
at System.Windows.Forms.ToolTip.BaseFormDeactivate(Object sender, EventArgs e)
at System.EventHandler.Invoke(Object sender, EventArgs e)
at System.Windows.Forms.Form.OnDeactivate(EventArgs e)
at Crownwood.DotNetMagic.Forms.WindowChrome.OnDeactivate(EventArgs e)
at System.Windows.Forms.Form.set_Active(Boolean value)
at System.Windows.Forms.Form.WmActivate(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at Crownwood.DotNetMagic.Forms.WindowChrome.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
答案 0 :(得分:0)
您好像没有处理为ToolTip创建的对象。确保已将创建的ToolTip对象放置在相应控件的(IDataGridViewEditingControl)dispose方法中。
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (Tip != null)
{
Tip.Active = false;
Tip.Dispose();
Tip = null;
}
}
base.Dispose(disposing);
}