标题:很好看的和功能强大的 DataGridView
取消只看楼主
heyu52
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-4-11
 问题点数:0 回复次数:1 
很好看的和功能强大的 DataGridView
using System;
using System.Collections.Generic;
using
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using HVS.WinUI.Forms;

namespace HVS.
{
    public partial class GridView : DataGridView
    {
        #region 公共变量
        Button btnLeft = new Button();
        private ContextMenuStrip HeaderColumnMenuStrip;
        private ToolStripMenuItem HiddenColumn;
        private ToolStripMenuItem IncreasingColumn;
        private ToolStripMenuItem DecreasingColumn;
        private ToolStripMenuItem RemovalOrder;
        private ToolStripMenuItem Autoadjustcolumn;
        string CurrentColumnName = "";//获取单击时的列名
        Point point = Point.Empty;
        private ToolStripSeparator toolStripSeparator1;
        private ToolStripMenuItem EnquiryColumn;
        private ToolStripSeparator toolStripSeparator2;
        private ToolStripMenuItem FixedColumn;//获取单击时的绝对坐标

        private List<ColumnLookup> _columnLookups = new List<ColumnLookup>();
        private Dictionary<DataGridViewColumn, LookUp> _columnsWithLookup;
        private bool _isRetureLookUpColumn = false;
        Dictionary<string, string> Columus = new Dictionary<string, string>();
        LookUp Lookup = new LookUp();

        bool _allowUserToOrderColumns = true;

        #endregion

        #region 属性
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Category("HVS")]
        public List<ColumnLookup> ColumnLookups
        {
            get { return _columnLookups; }
            set { _columnLookups = value; }
        }

        [DefaultValue(true)]
        [Browsable(true)]
        [EditorBrowsable(EditorBrowsableState.Always)]
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        [Category("HVS")]
        public new bool AllowUserToOrderColumns
        {
            get { return _allowUserToOrderColumns; }
            set { _allowUserToOrderColumns = value; }
        }

        #endregion

        #region 事件
        public delegate void CancelLookupEventHandler(object sender, CancelLookupEventArgs e);
        public delegate void LookupEventHandler(object sender, LookupEventArgs e);

        public event CancelLookupEventHandler BeforeLookup;
        public event LookupEventHandler AfterLookup;
        LookupEventArgs AfterLookupArgs = new LookupEventArgs();
        #endregion

        #region 构造函数
        private components = null;

        private void InitializeComponent()
        {
             = new ();
            this.HeaderColumnMenuStrip = new System.Windows.Forms.ContextMenuStrip();
            this.EnquiryColumn = new System.Windows.Forms.ToolStripMenuItem();
            this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
            this.HiddenColumn = new System.Windows.Forms.ToolStripMenuItem();
            this.FixedColumn = new System.Windows.Forms.ToolStripMenuItem();
            this.Autoadjustcolumn = new System.Windows.Forms.ToolStripMenuItem();
            this.toolStripSeparator1 = new System.Windows.Forms.ToolStripSeparator();
            this.IncreasingColumn = new System.Windows.Forms.ToolStripMenuItem();
            this.DecreasingColumn = new System.Windows.Forms.ToolStripMenuItem();
            this.RemovalOrder = new System.Windows.Forms.ToolStripMenuItem();
            this.HeaderColumnMenuStrip.SuspendLayout();
            (()(this)).BeginInit();
            this.SuspendLayout();
            //
            // HeaderColumnMenuStrip
            //
            this.HeaderColumnMenuStrip.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
            this.EnquiryColumn,
            this.toolStripSeparator2,
            this.HiddenColumn,
            this.FixedColumn,
            this.Autoadjustcolumn,
            this.toolStripSeparator1,
            this.IncreasingColumn,
            this.DecreasingColumn,
            this.RemovalOrder});
            this.HeaderColumnMenuStrip.Name = "contextMenuStrip1";
            this.HeaderColumnMenuStrip.Size = new System.Drawing.Size(143, 170);
            //
            // EnquiryColumn
            //
            this.EnquiryColumn.Name = "EnquiryColumn";
            this.EnquiryColumn.Size = new System.Drawing.Size(142, 22);
            this.EnquiryColumn.Text = "查询";
            this.EnquiryColumn.Click += new System.EventHandler(this.EnquiryColumn_Click);
            //
            // toolStripSeparator2
            //
            this.toolStripSeparator2.Name = "toolStripSeparator2";
            this.toolStripSeparator2.Size = new System.Drawing.Size(139, 6);
            //
            // HiddenColumn
            //
            this.HiddenColumn.Name = "HiddenColumn";
            this.HiddenColumn.Size = new System.Drawing.Size(142, 22);
            this.HiddenColumn.Text = "隐藏此列";
            this.HiddenColumn.Click += new System.EventHandler(this.HiddenColumn_Click);
            //
            // FixedColumn
            //
            this.FixedColumn.Name = "FixedColumn";
            this.FixedColumn.Size = new System.Drawing.Size(142, 22);
            this.FixedColumn.Text = "固定列";
            this.FixedColumn.Click += new System.EventHandler(this.FixedColumn_Click);
            //
            // Autoadjustcolumn
            //
            this.Autoadjustcolumn.Name = "Autoadjustcolumn";
            this.Autoadjustcolumn.Size = new System.Drawing.Size(142, 22);
            this.Autoadjustcolumn.Text = "自动调整列宽";
            this.Autoadjustcolumn.Click += new System.EventHandler(this.Autoadjustcolumn_Click);
            //
            // toolStripSeparator1
            //
            this.toolStripSeparator1.Name = "toolStripSeparator1";
            this.toolStripSeparator1.Size = new System.Drawing.Size(139, 6);
            //
            // IncreasingColumn
            //
            this.IncreasingColumn.Name = "IncreasingColumn";
            this.IncreasingColumn.Size = new System.Drawing.Size(142, 22);
            this.IncreasingColumn.Text = "递增排列";
            this.IncreasingColumn.Click += new System.EventHandler(this.IncreasingColumn_Click);
            //
            // DecreasingColumn
            //
            this.DecreasingColumn.Name = "DecreasingColumn";
            this.DecreasingColumn.Size = new System.Drawing.Size(142, 22);
            this.DecreasingColumn.Text = "递减排列";
            this.DecreasingColumn.Click += new System.EventHandler(this.DecreasingColumn_Click);
            //
            // RemovalOrder
            //
            this.RemovalOrder.Name = "RemovalOrder";
            this.RemovalOrder.Size = new System.Drawing.Size(142, 22);
            this.RemovalOrder.Text = "清除排列";
            this.RemovalOrder.Click += new System.EventHandler(this.RemovalOrder_Click);
            //
            // GridView
            //
            this.RowTemplate.Height = 23;
            this.HeaderColumnMenuStrip.ResumeLayout(false);
            (()(this)).EndInit();
            this.ResumeLayout(false);

        }


        public GridView()
            : base()
        {
            InitializeComponent();
            _columnsWithLookup = new Dictionary<DataGridViewColumn, LookUp>();
        }

        public GridView(IContainer container)
        {
            container.Add(this);

            InitializeComponent();
        }
        #endregion

        #region GridView
        protected override void InitLayout()
        {
            base.InitLayout();
            if (!DesignMode)
            {
                InitializeColumnsLookup();
                btnLeft.Location = new Point(1, 1);
                btnLeft.Text = "显示";
                btnLeft.Size = new Size(this.RowHeadersWidth - 1, 25);
                if (!DesignMode)
                    btnLeft.Click += new EventHandler(btnLeft_Click);
                this.Controls.Add(btnLeft);
            }
        }

        void btnLeft_Click(object sender, EventArgs e)
        {
            Dictionary<string, bool> columnsName = new Dictionary<string, bool>();
            foreach (DataGridViewColumn column in this.Columns)
            {
                columnsName.Add(column.Name, column.Visible);
            }

            Point loc = new Point();
            loc = FindFormLocation(this);
            Point selPoint = new Point();

            if (FindFormType())
                selPoint = new Point(loc.X + this.Left, loc.Y + this.Top + SystemInformation.CaptionHeight);
            else
                selPoint = new Point(loc.X + this.Left, loc.Y + this.Top + SystemInformation.CaptionHeight + 68 + SystemInformation.MenuHeight);

            SelectColumnForm selectColumnForm = new SelectColumnForm(columnsName, selPoint);

            selectColumnForm.TopMost = true;
            selectColumnForm.ShowDialog();


            foreach (DataGridViewColumn column in this.Columns)
            {
                column.Visible = SelectColumnForm.IsColumnCheck[column.Name];
            }
        }

        protected override void OnCreateControl()
        {

            base.OnCreateControl();

            #region 样式外观

            //去掉默认的样式外观
            this.EnableHeadersVisualStyles = false;

            this.ColumnHeadersDefaultCellStyle.BackColor = Color.FromArgb(247, 246, 239);
            this.ColumnHeadersBorderStyle = DataGridViewHeaderBorderStyle.Raised;
            this.ColumnHeadersHeight = 26;
            this.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.DisableResizing;

            this.ColumnHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleCenter;
            this.ColumnHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
            this.ColumnHeadersDefaultCellStyle.SelectionBackColor = System.Drawing.SystemColors.Highlight;
            this.ColumnHeadersDefaultCellStyle.SelectionForeColor = System.Drawing.SystemColors.HighlightText;
            this.RowHeadersDefaultCellStyle.Alignment = System.Windows.Forms.DataGridViewContentAlignment.MiddleLeft;
            this.RowHeadersDefaultCellStyle.BackColor = System.Drawing.SystemColors.Window;
            this.RowHeadersDefaultCellStyle.ForeColor = System.Drawing.SystemColors.WindowText;
            this.RowHeadersBorderStyle = System.Windows.Forms.DataGridViewHeaderBorderStyle.Single;
            this.DefaultCellStyle.SelectionBackColor = Color.Wheat;
            this.DefaultCellStyle.SelectionForeColor = Color.DarkSlateBlue;
            this.RowHeadersWidthSizeMode = DataGridViewRowHeadersWidthSizeMode.DisableResizing;
            this.GridColor = System.Drawing.SystemColors.GradientActiveCaption;
            this.BackgroundColor = System.Drawing.SystemColors.Window;
            this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
            FixedColumn.Checked = false;

            #endregion

        }



        //获取点击的列名
        protected override void OnColumnHeaderMouseClick(DataGridViewCellMouseEventArgs e)
        {
            base.OnColumnHeaderMouseClick(e);
            if (e.X + this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Left > this.RowHeadersWidth && e.Y < ColumnHeadersHeight)
            {
                //point = new Point(e.X + this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Left, e.Y);

                #region   Checked
                try
                {
                    if (this.SortedColumn.Name == CurrentColumnName)
                    {
                        if (this.SortOrder == SortOrder.Ascending)
                        {
                            this.IncreasingColumn.Checked = true;
                            this.DecreasingColumn.Checked = false;
                            this.RemovalOrder.Checked = false;
                        }
                        else if (this.SortOrder == SortOrder.Descending)
                        {
                            this.IncreasingColumn.Checked = false;
                            this.DecreasingColumn.Checked = true;
                            this.RemovalOrder.Checked = false;
                        }
                        else if (this.SortOrder == SortOrder.None && this.Columns[CurrentColumnName].SortMode == DataGridViewColumnSortMode.NotSortable)
                        {
                            this.IncreasingColumn.Checked = false;
                            this.DecreasingColumn.Checked = false;
                            this.RemovalOrder.Checked = true;
                        }
                    }
                    else
                    {
                        this.IncreasingColumn.Checked = false;
                        this.DecreasingColumn.Checked = false;
                        this.RemovalOrder.Checked = false;
                    }
                }
                catch
                {
                    this.IncreasingColumn.Checked = false;
                    this.DecreasingColumn.Checked = false;
                    this.RemovalOrder.Checked = false;
                }
                #endregion
            }
        }

        //主要弹出右击菜单
        protected override void OnMouseClick(MouseEventArgs e)
        {

            System.Windows.Forms.DataGridView.HitTestInfo hti = this.HitTest(e.X, e.Y);
            try
            {
                CurrentColumnName = this.Columns[hti.ColumnIndex].Name;
            }
            catch
            {

            }

            if (e.Button == MouseButtons.Right)
            {
                foreach (Control con in this.Controls)
                    if (con == btnLeft) continue;
                    else if (con is Button)
                        con.Dispose();
                if (hti.Type == DataGridViewHitTestType.ColumnHeader)
                {
                    this.HeaderColumnMenuStrip.Show(this, e.Location);
                }
                else if (hti.Type == DataGridViewHitTestType.TopLeftHeader)
                {
                    //左上角的单元格
                }
            }

            base.OnMouseClick(e);
        }

        bool FindFormType()
        {
            if (this.Parent is LookupForm)
                return true;
            else
                return false;
        }

        Point FindFormLocation(Control control)
        {
            if (control.Parent is Form)
            {
                if (((Form)control.Parent).IsMdiChild)
                {
                    return new Point(((Form)control.Parent).ParentForm.Left, ((Form)control.Parent).ParentForm.Top);
                }
                else
                {
                    return new Point(control.Parent.Left, control.Parent.Top);
                }
            }
            else
            {
                return FindFormLocation(control.Parent);
            }
        }

        #endregion

        #region  释放资源

        public virtual void ReleaseResources()
        {

        }

        private void PerformReleaseResources()
        {

        }

        protected override void Dispose(bool disposing)
        {
            if (disposing)
            {
                try
                {
                    PerformReleaseResources();
                }
                catch
                {

                }

                if (components != null)
                {
                    components.Dispose();
                }
            }
            base.Dispose(disposing);
        }

        #endregion

        #region lookup

        public void ResetColumnLookups()
        {
            if (this._columnLookups == null)
                this._columnLookups = new List<ColumnLookup>();
            else
                this._columnLookups.Clear();
        }

        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1031:DoNotCatchGeneralExceptionTypes")]
        public void InitializeColumnsLookup()
        {
            if (DesignMode) return;
            if (ColumnLookups.Count == 0) return;
            DataGridViewColumn col = null;
            _columnsWithLookup = new Dictionary<DataGridViewColumn, LookUp>();
            foreach (ColumnLookup columnLookup in this.ColumnLookups)
            {
                if (!this.Columns.Contains(columnLookup.ColumnKey)) continue;

                col = this.Columns[columnLookup.ColumnKey];

                if (_columnsWithLookup.ContainsKey(col))
                    _columnsWithLookup[col] = (LookUp)columnLookup;
                else
                    _columnsWithLookup.Add(col, (LookUp)columnLookup);
            }
        }

        protected override void OnCellEnter(DataGridViewCellEventArgs e)
        {
            foreach (Control con in this.Controls)
                if (con == btnLeft) continue;
                else if (con is Button)
                    con.Dispose();
            base.OnCellEnter(e);
            if (_columnsWithLookup == null) return;
            foreach (DataGridViewColumn col in _columnsWithLookup.Keys)
            {
                if (col.Name == this.Columns[e.ColumnIndex].Name)
                {
                    Lookup = _columnsWithLookup[col];
                    if (string.IsNullOrEmpty(Lookup.SQL))
                        return;
                    Button btn = new Button();
                    btn.Text = "...";
                    btn.Font = new Font("Arial", 7);
                    btn.Visible = true;
                    btn.Width = this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Height;
                    btn.Height = this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Height;
                    this.Controls.Add(btn);
                    btn.Location = new System.Drawing.Point((this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true)
                        .Right - btn.Width), this.GetCellDisplayRectangle(e.ColumnIndex, e.RowIndex, true).Y);
                    btn.Click -= new EventHandler(btn_Click);
                    btn.Click += new EventHandler(btn_Click);
                    return;
                }
            }
        }

        void btn_Click(object sender, EventArgs e)
        {
            btn_LookUp(sender, new CancelLookupEventArgs());
            Application.DoEvents();
        }

        public void btn_LookUp(object sender, CancelLookupEventArgs e)
        {
            #region BeforeLookup
            if (BeforeLookup != null)
            {
                BeforeLookup(sender, e);
                if (e.Cancel == true)//beforelookup前进行取消
                {
                    this.SelectAll();
                    return;
                }
            }
            #endregion

            #region Lookup
            if (!string.IsNullOrEmpty(Lookup.SQL))
            {
                //try
                //{
                DataTable table = new DataTable();

                System.Data.SqlClient.SqlCommand cmd = new System.Data.SqlClient.SqlCommand();
                = Lookup.SQL;
                System.Data.SqlClient.SqlDataAdapter adp = new System.Data.SqlClient.SqlDataAdapter(, );
                DataSet ds = new DataSet();
                adp.Fill(ds);
                DataTable newtable = new System.Data.DataTable();
                Columus.Clear();
                foreach (DataColumn co in ds.Tables[0].Columns)
                {
                    DataColumn col = new DataColumn(co.ColumnName, co.DataType);
                    col.ReadOnly = true;
                    newtable.Columns.Add(col);
                    Columus.Add(co.ColumnName, co.ColumnName);
                    if (!_isRetureLookUpColumn && !string.IsNullOrEmpty(Lookup.ReturnColumn))
                    {
                        if (co.ColumnName == Lookup.ReturnColumn)
                        {
                            _isRetureLookUpColumn = true;//如果指定的列合法
                        }
                    }

                }
                foreach (DataRow row in ds.Tables[0].Rows)
                {
                    object[] value = new object[row.Table.Columns.Count];
                    for (int i = 0; i < row.Table.Columns.Count; i++)
                        value[i] = row[i];
                    newtable.Rows.Add(value);
                }
                LookupForm lookupForm = new LookupForm(newtable, Columus);
                if (_isRetureLookUpColumn)
                    lookupForm.ReturnColumn = Lookup.ReturnColumn;//返回指定行的指定列
                else
                    lookupForm.ReturnColumn = "";//返回当前行第一列

                lookupForm.TopMost = true;
                lookupForm.ShowDialog();
                if (LookupForm.IsSelectRow)
                {
                    this.CurrentCell.Value = lookupForm.ReturnValue;

                    AfterLookupArgs.LookUpSelectRow = lookupForm.LookUpSelectRow;
                }

                // this.Focus();
                //}
                //catch
                //{
                //    MessageBox.Show("失败");
                //    this.Text = "";
                //    this.Focus();
                //    this.SelectionStart = this.Text.Length;
                //    AfterLookupArgs.LookUpSelectRow = null;
                //    return;
                //}
            }
            #endregion

            #region  AfterLookup
            if (AfterLookup != null && LookupForm.IsSelectRow)
            {
                AfterLookup(sender, AfterLookupArgs);

            }
            #endregion
        }

        protected override void OnCellLeave(DataGridViewCellEventArgs e)
        {
            base.OnCellLeave(e);
            foreach (Control con in this.Controls)
                if (con == btnLeft) continue;
                else if (con is Button)
                    con.Dispose();
        }

        #endregion

        #region 标题菜单

        private void HiddenColumn_Click(object sender, EventArgs e)
        {
            this.Columns[CurrentColumnName].Visible = false;
            this.ContextMenuStrip = null;
        }

        private void EnquiryColumn_Click(object sender, EventArgs e)
        {

        }

        private void DecreasingColumn_Click(object sender, EventArgs e)
        {
            this.Columns[CurrentColumnName].SortMode = DataGridViewColumnSortMode.Automatic;
            this.Sort(this.Columns[CurrentColumnName], ListSortDirection.Descending);
        }

        private void IncreasingColumn_Click(object sender, EventArgs e)
        {
            this.Columns[CurrentColumnName].SortMode = DataGridViewColumnSortMode.Automatic;
            this.Sort(this.Columns[CurrentColumnName], ListSortDirection.Ascending);
        }

        private void FixedColumn_Click(object sender, EventArgs e)
        {
            FixedColumn.Checked = !FixedColumn.Checked;
            this.AllowUserToOrderColumns = !FixedColumn.Checked;
        }

        private void RemovalOrder_Click(object sender, EventArgs e)
        {
            this.Columns[CurrentColumnName].SortMode = DataGridViewColumnSortMode.NotSortable;
        }

        private void Autoadjustcolumn_Click(object sender, EventArgs e)
        {

        }

        #endregion

    }

    #region SelectColumnForm

    public partial class SelectColumnForm : Form
    {

        private components = null;
        private System.Windows.Forms.CheckedListBox checkedListColumns;
        Point point = Point.Empty;

        public static Dictionary<string, bool> IsColumnCheck = new Dictionary<string, bool>();

        private void InitializeComponent()
        {
            this.checkedListColumns = new System.Windows.Forms.CheckedListBox();
            this.SuspendLayout();
            //
            // checkedListColumns
            //
            this.checkedListColumns.Dock = System.Windows.Forms.DockStyle.Fill;
            this.checkedListColumns.FormattingEnabled = true;
            this.checkedListColumns.Items.AddRange(new object[] {
            "全选"});
            this.checkedListColumns.Location = new System.Drawing.Point(0, 0);
            this.checkedListColumns.Name = "checkedListColumns";
            this.checkedListColumns.Size = new System.Drawing.Size(162, 308);
            this.checkedListColumns.TabIndex = 0;
            this.checkedListColumns.SelectedValueChanged += new System.EventHandler(this.checkedListColumns_SelectedValueChanged);
            //
            // SelectColumnForm
            //
            this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 12F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(162, 320);
            this.Controls.Add(this.checkedListColumns);
            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
            this.MaximizeBox = false;
            this.MinimizeBox = false;
            this.Name = "SelectColumnForm";

            this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
            // this.Location = this.point;
            this.Text = "选择显示列";
            this.ResumeLayout(false);

        }

        public SelectColumnForm()
        {
            InitializeComponent();
        }

        public SelectColumnForm(Dictionary<string, bool> Columns, Point location)
        {
            point = location;
            InitializeComponent();
            foreach (string columnName in Columns.Keys)
            {
                this.checkedListColumns.Items.Add(columnName, Columns[columnName]);
            }
            IsColumnCheck.Clear();
            this.Location = this.point;
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            for (int i = 1; i < this.checkedListColumns.Items.Count; i++)
                IsColumnCheck.Add(checkedListColumns.Items[i].ToString(), checkedListColumns.GetItemChecked(i));
            base.OnFormClosing(e);
        }

        private void checkedListColumns_SelectedValueChanged(object sender, EventArgs e)
        {
            try
            {
                if (checkedListColumns.Items[checkedListColumns.SelectedIndex].ToString() == "全选" && checkedListColumns.GetItemChecked(checkedListColumns.SelectedIndex))
                {
                    for (int i = 1; i < this.checkedListColumns.Items.Count; i++)
                        checkedListColumns.SetItemChecked(i, true);
                }
            }
            catch
            { }
        }

        protected override void Dispose(bool disposing)
        {
            if (disposing && (components != null))
            {
                components.Dispose();
            }
            base.Dispose(disposing);
        }

    }

    #endregion
}

[[it] 本帖最后由 heyu52 于 2008-4-12 14:55 编辑 [/it]]

view.jpg (34.51 KB)
搜索更多相关主题的帖子: DataGridView 功能 
2008-04-12 14:39
heyu52
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2008-4-11
得分:0 
VS2008
我的这个是用VS2008做的,你们装了没有先
2008-04-12 20:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-208598-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.130684 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved