C# AutoCAD程序老是崩溃,高手请进。帮帮我!

jxzz016590 2011-04-18 05:17:17
我先把代码贴下来:
using System;
using Autodesk.AutoCAD.Runtime;
using Autodesk.Windows;
using Autodesk.AutoCAD.ApplicationServices;
using acadApp = Autodesk.AutoCAD.ApplicationServices.Application;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System.Windows.Controls;
using System.Windows;
using System.Windows.Data;
using Autodesk.AutoCAD.Ribbon;
using System.Runtime.InteropServices;
using System.Windows.Interop;
using System.Text;
using CUMTLab;
using System.Data.OleDb;
using System.Windows.Forms;
using System.Data;
using drawCircle;


namespace ribbon2009
{
public class testribbon
{
//public static int count;
//定义三个数组存储坐标
public static double[] X ;
public static double[] Y ;
public static double[] Z ;

[CommandMethod("test")]
#region row
public void creatRibbon()
{
RibbonButton button = new RibbonButton();
button.Text = "巷道设计";
button.Orientation = System.Windows.Controls.Orientation.Vertical;
button.Size = RibbonItemSize.Large;
button.ShowText = true;
button.Id = "ClickMe_1";

RibbonButton loadExcel_button = new RibbonButton();
loadExcel_button.Text = "导入坐标点";
loadExcel_button.Orientation = System.Windows.Controls.Orientation.Vertical;
loadExcel_button.Size = button.Size;
loadExcel_button.ShowText = true;
loadExcel_button.Id = "excel_Button";

//创建RibbonRow用来放置按钮
RibbonRow row = new RibbonRow();
row.IsInSlideoutPanel = false;
row.Items.Add(button);
RibbonRow row2 = new RibbonRow();
row2.Items.Add(loadExcel_button);


//创建RibbonPanelSource,用来放置RibbonRow
RibbonPanelSource panelSource = new RibbonPanelSource();
panelSource.Title = "巷道选型";
panelSource.Rows.Add(row);
RibbonPanelSource panelSource2 = new RibbonPanelSource();
panelSource2.Title = "坐标点导入";
panelSource2.Rows.Add(row2);

//再创建一个RibbonPanel来放置上面的RibbonSource
RibbonPanel panel = new RibbonPanel();
panel.Source = panelSource;
RibbonPanel panel2 = new RibbonPanel();
panel2.Source = panelSource2;

//创建AutoCAD菜单标签,放置RibbonPanel
RibbonTab tab = new RibbonTab();
tab.Title = "采矿";
tab.IsContextualTab = false;
tab.CopyFrom(tab);
tab.Panels.Add(panel);
tab.Panels.Add(panel2);

//RibbonControl是所有AutoCAD控制按钮的基础
RibbonControl ribbonControl = Autodesk.AutoCAD.Ribbon.RibbonServices.RibbonPaletteSet.RibbonControl;
ribbonControl.Tabs.Add(tab);
//激活标签,响应事件
ribbonControl.ActiveTab = tab;
button.Click += new RoutedEventHandler(button_Click);
loadExcel_button.Click += new RoutedEventHandler(loadExcel_button_Click);

}

private static void button_Click(Object sender, RoutedEventArgs e)
{
RibbonButton button = sender as RibbonButton;
if (button != null && (button.Id == "ClickMe_1"))
{
MainForm myForm = new MainForm();
myForm.Show();
}
}
private static void loadExcel_button_Click(Object sender, RoutedEventArgs e)
{
RibbonButton loadExcel_button = sender as RibbonButton;

if (loadExcel_button != null && (loadExcel_button.Id == "excel_Button"))
{
OpenFileDialog openExcelFileDialog1 = new OpenFileDialog();
openExcelFileDialog1.Filter = "excel文件(*.xls)|*.xls";

if (openExcelFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
{

//打开EXCEL文件,从中读取数据
string filePath = openExcelFileDialog1.FileName;//指定文件位置
string myString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source='" + filePath +
"';Extended Properties=Excel 8.0;";
OleDbConnection connxls = new OleDbConnection(myString);//与excel文件建立连接
OleDbDataAdapter myDa = new OleDbDataAdapter("Select * from [Sheet1$]", connxls);//读取数据
DataSet myDataSet = new DataSet();
myDa.Fill(myDataSet);
System.Data.DataTable myDataTab = myDataSet.Tables[0];
int count = myDataSet.Tables[0].Rows.Count;
//从excel里面读出数据存入数组,在下面传入画圆的函数
for (int index = 0; index < count; index++)
{
X[index] = Convert.ToDouble(myDataTab.Rows[index][0]);

Y[index] = Convert.ToDouble(myDataTab.Rows[index][1]);

Z[index] = Convert.ToDouble(myDataTab.Rows[index][2]);
}
Draw(X, Y, Z);
}
}




}


public static void Draw(double[] arr1, double[] arr2, double[] arr3)
{
for (int i = 0; i < arr1.Length; i++)
{
double x = arr1[i];
double y = arr2[i];
double z = arr3[i];
//这是我自己写的类库里面的函数,传递三个参数做为圆心的位置,在CAD上画出圆
drawCircle.circle_drawings.drawCircle(x, y, z);
}
}
#endregion
}
}


编译能通过,但是在AutoCAD里面运行的时候总是崩溃,提示Unhandled Access Violation Reading 0X0004 Exception at 644fee80h 希望哪位高手能进来帮我看看,谢谢了
...全文
405 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
weishaolin131083 2011-04-18
  • 打赏
  • 举报
回复
感觉c#做界面比 VB 还难做。
weishaolin131083 2011-04-18
  • 打赏
  • 举报
回复
Ribbon?

问题不是一般的多。
wangwang1103 2011-04-18
  • 打赏
  • 举报
回复
调试吧,看具体问题出现在什么地方。然后才能分析怎么做。
窗户纸 2011-04-18
  • 打赏
  • 举报
回复
这个我有经验,貌似线程问题
试试将 MainForm myForm = new MainForm();
myForm.Show();
放到新的线程执行。
crackdung 2011-04-18
  • 打赏
  • 举报
回复
如果不行就用控件吧


網站
Dobzhansky 2011-04-18
  • 打赏
  • 举报
回复
API 哦多克是不是都做成 .net 哦,
Revit 那个只有 .net.

110,535

社区成员

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

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

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