未将对象引用设置到对象的实例

nijiushiposhi 2010-06-12 03:10:02
小菜请教:
在窗体A中打开了窗体B,窗体B中有TeeChart控件,打开B的代码:
B b = new B();
b.Owner = this;
b.ShowDialog();
点击窗体B中某按钮(调用TeeChart控件进行画线操作),然后在b.ShowDialog();处报错 未将对象引用设置到对象的实例。

我删掉TeeChart控件,点按钮不报错。是不是画完线后,TeeChart为空了,应该怎样处理?
...全文
277 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
捷哥1999 2010-06-12
  • 打赏
  • 举报
回复
zed.ShowDialog();肯定会触发窗体的load事件,你检查一下窗体的load事件处理程序代码吧!
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
自己顶
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 nijiushiposhi 的回复:]

行号 143 就是这句 b.ShowDialog();
[/Quote]

代码太多了,您的意思是不关TeeChart的事,是B窗体的代码有问题?
捷哥1999 2010-06-12
  • 打赏
  • 举报
回复
zed.ShowDialog();
zed这个对象的类代码贴出来。
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
行号 143 就是这句 zed.ShowDialog();
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
把B窗体中的dffx()的代码放try里,没报错。

然后在A窗体中
try
{
B b = new B();
b.Owner = this;
b.ShowDialog();
}
catch (Exception error)
{
throw error;
}

报错
er.Source TeeChart
er.StackTrace 在 Steema.TeeChart.Styles.Series.CalcXPosValue(Double value)
在 Steema.TeeChart.Styles.Series.CalcXPos(Int32 index)
在 Steema.TeeChart.Styles.CustomPoint.CalcXPos(Int32 valueIndex)
在 Steema.TeeChart.Styles.CustomPoint.Clicked(Int32 x, Int32 y)
在 Steema.TeeChart.Tools.MarksTip.MouseEvent(MouseEventKinds kind, MouseEventArgs e, Cursor& c)
在 Steema.TeeChart.Chart.BroadcastMouseEvent(MouseEventKinds kind, MouseEventArgs e, Cursor& c)
在 Steema.TeeChart.Chart.BroadcastMouseEvent(MouseEventKinds kind, MouseEventArgs e, Keys modKeys)
在 Steema.TeeChart.TChart.OnMouseMove(MouseEventArgs e)
在 System.Windows.Forms.Control.WmMouseMove(Message& m)
在 System.Windows.Forms.Control.WndProc(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(Int32 dwComponentID, Int32 reason, Int32 pvLoopData)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
在 System.Windows.Forms.Application.RunDialog(Form form)
在 System.Windows.Forms.Form.ShowDialog(IWin32Window owner)
在 System.Windows.Forms.Form.ShowDialog()
在 EIMAS.JKSJGL_FC.dataGridView1_CellClick(Object sender, DataGridViewCellEventArgs e) 位置 E:\Microsoft\Visual Studio 2005\EIMAS_Solution\WinApp\JKSJGL_FC.cs:行号 143



宇峰科技 2010-06-12
  • 打赏
  • 举报
回复
try
{
//...
}
catch (Exception error)
{
throw error;
}
//看看哪一句报错
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
断点看了,线条出来后,就报错了,郁闷啊。
boitboy 2010-06-12
  • 打赏
  • 举报
回复
断点看一下,通常情况下这个错误是由于你的object为null,然而你却调用了它的参数或者方法。
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 mervyn807 的回复:]

楼主的思维还是没说清楚呢
你A打开B的时候B b = new B();
b.Owner = this;
b.ShowDialog();
这个时候你的B已经show出来了吧
不然你怎么 点击窗体B中某按钮(调用TeeChart控件进行画线操作)呢
但奇怪的是你点B窗体的按钮,A窗体代码报错吗

不知道是不是我理解错了
[/Quote]

理解的正确
B出现后,没有任何错误,当我点击按钮进行画线操作后,TeeChart出现线条,但随即就在A窗体的b.ShowDialog();处报错
smthgdin_020 2010-06-12
  • 打赏
  • 举报
回复
楼主表达不清晰。。。。。
你在new b对象那里设置断点,调试一下。
估计是b对象那里没执行或者其他原因导致没创建,所以就报那个错误。
这个错误一看就要想到对象没实例的问题。
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
void dffx()
{
DataTable table = this.zedSource.Tables[0];
string fdjwz = this.radioButton3.Checked ? "左" : "右";
if (this.checkedListBox1.CheckedItems.Count == 0)
{
MessageBox.Show("请至少选择一个参数", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
this.tChart1.Header.Text = fdjwz;
foreach (object obj in this.checkedListBox1.CheckedItems)
{
string itemValue = "ABC".Contains(obj.ToString()) ? fdjwz + obj.ToString() : obj.ToString();
if (dicParm.ContainsKey(obj.ToString()))
{
Points p = new Points(); //是不是这句话有问题
foreach (DataRow row in table.Rows)
{
if (table.Columns[itemValue] != null)
{
double fxsj = Convert.ToDouble(row["时间"]);
double ynum = Convert.ToDouble(row[itemValue]);
p.Add(fxsj, ynum);
}
}
Color c = new CustomCode().GetRandomColor() //还有这句
CustomCode.drawLine(this.tChart1, p, itemValue, c);
Model.FCParamter parMod = this.dicParm[obj.ToString()];
double minx = this.tChart1.Axes.Bottom.MinXValue;
double maxx = this.tChart1.Axes.Bottom.MaxXValue;
if (parMod.UpperLimit != -1) CustomCode.DrawWarLine(this.tChart1, minx, maxx, Convert.ToDouble(parMod.UpperLimit), itemValue + "警戒线(上限)", c, 1);
if (parMod.LowerLimit != -1) CustomCode.DrawWarLine(this.tChart1, minx, maxx, Convert.ToDouble(parMod.LowerLimit), itemValue + "警戒线(下限)", c, 1);
}
}
}
}
zlcp520 2010-06-12
  • 打赏
  • 举报
回复
不懂帮顶
缭绕飘渺 2010-06-12
  • 打赏
  • 举报
回复
楼主的思维还是没说清楚呢
你A打开B的时候B b = new B();
b.Owner = this;
b.ShowDialog();
这个时候你的B已经show出来了吧
不然你怎么 点击窗体B中某按钮(调用TeeChart控件进行画线操作)呢
但奇怪的是你点B窗体的按钮,A窗体代码报错吗

不知道是不是我理解错了
lzsh0622 2010-06-12
  • 打赏
  • 举报
回复
试试: b.Show();
zxhxiaoyi51 2010-06-12
  • 打赏
  • 举报
回复
代码快太少 错的代码都没给。。。。
宇峰科技 2010-06-12
  • 打赏
  • 举报
回复
点击窗体B中某按钮的代码贴出来
nijiushiposhi 2010-06-12
  • 打赏
  • 举报
回复
大家帮帮忙啊

111,125

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧