当前位置:   article > 正文

C# CAD交互界面-模态窗体与非模态窗体调用方式

C# CAD交互界面-模态窗体与非模态窗体调用方式

 运行环境Visual Studio 2022 c# cad2016

一、模态窗体调用方式
当一个模态窗体打开时,它会阻塞主窗体的所有输入,直到关闭该模态窗体为止。例如,弹出一个对话框让用户必须完成某些操作后才能继续使用主程序。

  1. [CommandMethod("Caidan")]
  2. public void Caidan()
  3. {
  4. ShowModalLayerSelectionForm();//模态窗体
  5. }
  6. //模态窗体
  7. private void ShowModalLayerSelectionForm()
  8. {
  9. using (var layerForm = new Form1())
  10. {
  11. DialogResult result = layerForm.ShowDialog(); // 使用ShowDialog()方法打开模态窗体
  12. if (result == DialogResult.OK || result == DialogResult.Yes) // 根据需要处理结果
  13. {
  14. // 处理用户选择图层的操作...
  15. }
  16. }
  17. }

二、非模态窗体调用方式

非模态窗体打开时,用户可以同时与主窗体和其他非模态窗体进行交互。通常用作工具栏、辅助信息显示窗口等。

  1. [CommandMethod("Caidan")]
  2. public void Caidan()
  3. {
  4. Form1 选择图层 = new Form1(); //非模态窗体
  5. 选择图层.Show();
  6. }

三、窗体程序

  1. this.MaximizeBox = false;
  2. this.MinimizeBox = false;
  3. // 初始化DataGridView
  4. DataGridView dataGridView = new DataGridView();// 创建一个新的DataGridView控件实例
  5. dataGridView.AllowUserToAddRows = false;// 禁止用户通过DataGridView界面直接添加新行
  6. dataGridView.AllowUserToDeleteRows = false;// 禁止用户通过DataGridView界面删除现有行
  7. dataGridView.BackgroundColor = Color.White;// 设置DataGridView的背景颜色为白色
  8. dataGridView.CellBorderStyle = DataGridViewCellBorderStyle.Single;// 设置单元格边框样式为单线边框
  9. dataGridView.DefaultCellStyle.SelectionBackColor = Color.LightBlue;// 设置选中单元格时的背景色为浅蓝色
  10. dataGridView.DefaultCellStyle.SelectionForeColor = Color.Black;// 设置选中单元格时的前景色(文本颜色)为黑色
  11. // 添加图层名称列
  12. DataGridViewTextBoxColumn layerNameColumn = new DataGridViewTextBoxColumn();
  13. layerNameColumn.HeaderText = "图层名称";
  14. layerNameColumn.ReadOnly = true;
  15. dataGridView.Columns.Add(layerNameColumn);
  16. // 假设GetLayerList返回CAD图层的名称列表
  17. //List<string> layerNames = GetLayerList();
  18. foreach (LayerTableRecord layer in GetLayerList())
  19. {
  20. dataGridView.Rows.Add(layer.Name);
  21. }
  22. // 添加DataGridView到窗体
  23. this.Controls.Add(dataGridView);
  24. dataGridView.Dock = DockStyle.Fill;
  25. dataGridView.CellDoubleClick += DataGridView_CellDoubleClick;
  26. }
  27. private void DataGridView_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
  28. {
  29. if (sender is DataGridView dgv && e.RowIndex >= 0) // 检查是否在有效的行上双击
  30. {
  31. string selectedLayerName = dgv.Rows[e.RowIndex].Cells[0].Value.ToString(); // 获取选中的图层名称
  32. // 处理双击选定图层的逻辑
  33. MessageBox.Show($"双击了图层:{selectedLayerName}");
  34. // 根据需求执行其他操作...
  35. }
  36. }
  37. private IEnumerable<LayerTableRecord> GetLayerList()
  38. {
  39. List<LayerTableRecord> layers = new List<LayerTableRecord>();
  40. using (Transaction tr = HostApplicationServices.WorkingDatabase.TransactionManager.StartTransaction())
  41. {
  42. LayerTable layerTable = (LayerTable)tr.GetObject(HostApplicationServices.WorkingDatabase.LayerTableId, OpenMode.ForRead);
  43. foreach (ObjectId id in layerTable)
  44. {
  45. LayerTableRecord layer = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);
  46. layers.Add(layer);
  47. }
  48. tr.Commit();
  49. }
  50. return layers;
  51. }

//感谢大家的点赞,收藏,转发,关注  

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/123741
推荐阅读
相关标签
  

闽ICP备14008679号