using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using DevComponents.DotNetBar; using GeoScene.Data; using GeoScene.Globe; namespace Cyberpipe { public partial class FrmMaterialSel : Office2007Form { GSOGlobeControl globeControl1; List<string> layerNames = new List<string>(); static FrmMaterialSel frm; private MainFrm.DataGridViewDelegate m_InitDataGridViewX1; DataTable table = new DataTable(); string strLable = ""; public static void ShowForm(GSOGlobeControl _ctl, List<string> _list, MainFrm.DataGridViewDelegate InitDataGridViewX1) { if (frm == null) { frm = new FrmMaterialSel(_ctl, _list, InitDataGridViewX1); frm.Show(_ctl.Parent); } else { if (frm.WindowState == FormWindowState.Minimized) { frm.WindowState = FormWindowState.Normal; } } } public FrmMaterialSel(GSOGlobeControl _ctl, List<string> _list, MainFrm.DataGridViewDelegate InitDataGridViewX1) { InitializeComponent(); globeControl1 = _ctl; layerNames = _list; m_InitDataGridViewX1 = InitDataGridViewX1; } /// <summary> /// 窗体初始化事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmMaterialSel_Load(object sender, EventArgs e) { for (int i = 0; i < layerNames.Count; i++) { if (!comboBoxEx1.Items.Contains(layerNames[i])) { comboBoxEx1.Items.Add(layerNames[i]); } } } /// <summary> /// 下拉框选中项事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void comboBoxEx1_SelectedIndexChanged(object sender, EventArgs e) { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxEx1.Text.Trim()); if (layer == null) { MessageBox.Show("图层不存在", "提示"); return; } ClassSearchAnalysis.ResultDistinctDataTable(out table, layer.Name, "材质"); if (table.Rows.Count > 0) { listBox1.Items.Clear(); for (int i = 0; i < table.Rows.Count; i++) { if (table.Rows[i][0].ToString() == "") { listBox1.Items.Add("无"); } else { listBox1.Items.Add(table.Rows[i][0].ToString()); } } } listBox2.Items.Clear(); } /// <summary> /// 将所有材质类型列表中的选中项添加到查询材质类型列表中 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX2_Click(object sender, EventArgs e) { if (listBox1.SelectedItems.Count>0) { for (int i = 0; i < listBox1.SelectedItems.Count; i++) { for (int j = 0; j < listBox2.Items.Count; j++) { if (listBox1.SelectedItems[i].ToString() == listBox2.Items[j].ToString()) { listBox2.Items.RemoveAt(j); break; } } listBox2.Items.Add(listBox1.SelectedItems[i]); } } else { MessageBox.Show("请选中一种所有材质类型!"); } } /// <summary> /// 查询按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX1_Click(object sender, EventArgs e) { if (listBox2.Items.Count == 0) { MessageBox.Show("请选择要查询的材质类型!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); } else { GSOLayer layer = globeControl1.Globe.Layers.GetLayerByCaption(comboBoxEx1.Text.Trim()); if (layer == null) { MessageBox.Show("图层不存在", "提示"); return; } List<string> filedValueList = new List<string>(); for (int i = 0; i < listBox2.Items.Count; i++) { filedValueList.Add(listBox2.Items[i].ToString()); } ClassSearchAnalysis.ResultDataTableContainNull(out table, globeControl1, comboBoxEx1.Text.Trim(), "材质", filedValueList); if (table != null && table.Rows.Count > 0) { strLable = comboBoxEx1.Text + " 共有:" + table.Rows.Count + "个"; m_InitDataGridViewX1(table, strLable, comboBoxEx1.Text, true); } else { MessageBox.Show("没有查到符合条件的数据!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } } /// <summary> /// 取消按钮事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX3_Click(object sender, EventArgs e) { Close(); } /// <summary> /// 窗体关闭事件处理 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void FrmMaterialSel_FormClosing(object sender, FormClosingEventArgs e) { m_InitDataGridViewX1(table, strLable, "", false); frm = null; } /// <summary> /// 删除查询材质类型列表中的选中项 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void buttonX4_Click(object sender, EventArgs e) { if (listBox2.SelectedItems.Count > 0) { for (int i = 0; i < listBox2.SelectedItems.Count; i++) { listBox2.Items.Remove(listBox2.SelectedItems[i]); i--; } } else { MessageBox.Show("请选中要删除的查询材质类型!"); } } } }