gpt4 book ai didi

datagridview - C# WinForms : Cannot access a dispose object

转载 作者:行者123 更新时间:2023-12-02 05:04:17 26 4
gpt4 key购买 nike

我有一个数据网格 View 。这个 datagridview 有自定义 datagridviewcolumns 和其他像 datagridviewtextboxcolumns。第三方控件托管在每个单元格中。因此,在设计 datagridview 时,在自定义单元格上,除非您处于单元格的编辑模式,否则无法显示内容。因此,为了实现要显示的单元格内容,我覆盖了绘制方法,以便在单元格未处于编辑模式时对其进行绘制。要在单元格中绘制的图像是在paint方法中获得的,我使用如下块:

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)

最佳答案

您似乎尚未处理为 ToolTip 创建的对象。确保您已在相应控件的 (IDataGridViewEditingControl) 处置方法中处置了 ToolTip 的创建对象。
protected override void Dispose(bool disposing)
{
if (disposing)
{
if (Tip != null)
{
Tip.Active = false;
Tip.Dispose();
Tip = null;
}
}
base.Dispose(disposing);
}

关于datagridview - C# WinForms : Cannot access a dispose object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13406560/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com