C# 常用 winfrom 常用 屬性

 

快捷鍵:

,ctrl+R,ctrl+E這兩個組合鍵,可以自動生成屬性中的get和set方法。
和java語法不同的是,除了get/set方法的寫法上,還有.net中既有field又properity.

field 是私有字段,內部使用,變量名前要有下畫線。
properity是公開的屬性,外部可見,變量名前沒有下畫線。
   當然,不用快捷鍵也可以鼠標選中field變量,然後右鍵refactor(重構),再encapuslate Field(封裝字段)。效果如下:

 #region field
 private int _LevelId;
 private string _LevelName;
 #endregion
 
 #region properity
 public int LevelId
 {
     get { return _LevelId; }
     set { _LevelId = value; }
 }
 public string LevelName
 {
     get { return _LevelName; }
     set { _LevelName = value; }
 }
 #endregion

   再有更好的就是,直接輸入prop,然後連按兩下tab.會自動生成get/set.只需要修改下屬性名即可。

字符串換行:

 System.Environment.NewLine;

 

TextBox:

//拉動條
   ///s設置下拉條
            txtSend.Multiline = true;
            txtSend.ScrollBars = ScrollBars.Both;
            

ComboBox:

            // 插入值  設置默認值
            cmbBaudRate.Items.Add("110");
            cmbBaudRate.Items.Add("300");
            cmbBaudRate.Items.Add("1200");
            cmbBaudRate.Items.Add("2400");
            cmbBaudRate.Items.Add("4800");
            cmbBaudRate.Items.Add("9600");
            cmbBaudRate.Items.Add("19200");
            cmbBaudRate.Items.Add("38400");
            cmbBaudRate.Items.Add("57600");
            cmbBaudRate.Items.Add("115200");
            cmbBaudRate.Items.Add("230400");
            cmbBaudRate.Items.Add("460800");
            cmbBaudRate.Items.Add("921600");
            cmbBaudRate.SelectedIndex = 5;

Button:

        //點擊確定 比如確定配置
        DialogResult = DialogResult.OK;
        DialogResult = DialogResult.Cancel;
          
        //調用窗體 會獲取到是點擊的OK還是Cancel
        ComSet dlg = new ComSet();
        if (dlg.ShowDialog() == DialogResult.OK)
         {
           //  ok
         }
        else
        {
            //Cancel
        }
            //按鈕打開文件
            OpenFileDialog open = new OpenFileDialog();
            open.InitialDirectory = "c\\";
            open.RestoreDirectory = true;
            open.FilterIndex = 1;
            open.Filter = "txt文件(*.txt)|*.txt";
            if (open.ShowDialog() == DialogResult.OK)
            {
                try
                {
                    if (open.OpenFile() != null)
                    {
                        txtFileName.Text = open.FileName;
                    }
                }
                catch (Exception err1)
                {
                    MessageBox.Show("文件打開錯誤!  " + err1.Message, "提示信息",                     
                    MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
            }
           

string 轉換

(1)轉換爲大寫:string UpTestStr=testStr.ToUpper();

轉換後UpTestStr結果爲:ABCDEFG

(2)轉換爲小寫:string LowTestStr=testStr.ToLower();
轉換後LowTestStr結果爲:abcdefg
取字符串 字段
 string str="123456789";
 str.Substring(0, 1)

string 位數不夠補0

C#位數不足補零
C#位數不足補零:
int i=10;
方法1:Console.WriteLine(i.ToString("D5"));
方法2:Console.WriteLine(i.ToString().PadLeft(5,'0'));//推薦
方法3:Console.WriteLine(i.ToString("00000"));

在 C# 中可以對字符串使用 PadLeft 和 PadRight 進行輕鬆地補位。

PadLeft(int totalWidth, char paddingChar) //在字符串左邊用 paddingChar 補足 totalWidth 長度
PadLeft(int totalWidth, char paddingChar) //在字符串右邊用 paddingChar 補足 totalWidth 長度
示例:
h = h.PadLeft(2, '0');
注意第二個參數爲 char 類型,所以用單引號,也可以用 Convert.ToChar(string value) 把字符串轉換成 char 類型。如果字符串長度大於 1,則使用 str.ToCharArray()[index]。

string 反轉

string str1 = "abcdefg";

            char[] cs = str1.ToCharArray();
            Array.Reverse(cs);

            string res = new string(cs);

            Console.WriteLine(res);
            MessageBox.Show(res);

app.config 配置修改

<appSettings>
    <!--開機自啓動-->
    <add key="SelfStarting" value="0"/>
  </appSettings>
//讀取
string str = ConfigurationManager.AppSettings["SelfStarting"];
//修改
ConfigText.UpdateAppConfig("SelfStarting", "0");

多線程

在多線程程序中,新創建的線程不能訪問UI線程創建的窗口控件,
這個時候如果你想要訪問窗口的控件,那麼你可以將窗口構造函數
中的CheckForIllegalCrossThreadCalls設置爲false.這是線程就
能安全的訪問窗體控件了.

如果捕獲了對錯誤線程的調用,則爲 true;否則爲 false

        public Frm_Main()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;
        }
        /// <summary>
        /// 啓動線程
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btn_StartupThread_Click(object sender, EventArgs e)
        {
            // 線程方法1髮卡記錄上傳接口(vn_base_card)
            thread1 = new Thread(new ThreadStart(doSomethingBase_Card));
         //啓動線程
            thread1.Start();
           this.BeginInvoke((ThreadStart)delegate ()
                                {
                                     s9 = db.Insertable(bc.ToArray()).ExecuteCommand();
                                });
        }
DataTable 讀寫
寫入:
  DataTable table = new DataTable();  table.Rows.Count; 行數
  table.Columns.Add("Name", Type.GetType("System.String"));//添加Name列,存儲數據類型爲string
  table.Columns.Add("Id", Type.GetType("System.Int32"));//添加Id列,存儲數據類型爲Int

  DataRow newRow = table.NewRow();
  newRow["Name"] = "張三";
  newRow["Id"] = 11;

  table.Rows.Add(newRow);
讀取:
方法一:

DataTable dt = dataSet.Tables[0];   

for(int i = 0 ; i < dt.Rows.Count ; i++)   

{   

   string strName = dt.Rows[i]["字段名"].ToString();   

}   
  
方法二:   

foreach(DataRow myRow in myDataSet.Tables["temp"].Rows)   
{   
      var str = myRow[0].ToString();   
}   
  
方法三:   

foeach(DataRow dr in dt.Rows)      
{      
     object value = dr["ColumnsName"];      
}   
  
方法四:   

DataTable dt=new DataTable();      
foreach(DataRow dr in dt.Rows)      
{    
   for(int i=0;i<dt.Columns.Count;i++)    
   {    
        dr[i];    
   }      
}   
 有時候我們需要對數據表進行篩選,微軟爲我們封裝了一個公共方法, DataTable.Select(),其用法如下:

Select()

Select(string filterExpression)

Select(string filterExpression, string sort)

Select(string filterExpression,string sort, DataViewRowState record States)

1)  Select()——獲取所有 System.Data.DataRow 對象的數組;

2)  Select(string filterExpression)——按照主鍵順序(如果沒有主鍵,則按照添加順序)獲取與篩選條件相匹配的所有 System.Data.DataRow 對象的數組;

3)  Select(string filterExpression, string sort)——獲取按照指定的排序順序且與篩選條件相匹配的所有System.Data.DataRow 對象的數組;

4)  Select(string filterExpression, string sort, DataViewRowState recordStates)——獲取與排序順序中的篩選器以及指定的狀態相匹配的所有。

 

舉例說明:

有一個用戶表,名稱爲 dtUsers,有id、姓名name、性別sex、年齡age

1.篩選所有的用戶  

         DataRow[] drs1 =dtUsers.Select();

2.篩選所有性別爲男的用戶

         DataRow[] drs2 =dtUsers.Select("sex = '男' ");

3.篩選所有性別爲男且年齡在18歲以上的用戶

         DataRow[] drs3 =dtUsers.Select("sex = '男' and age >= 18");

4.篩選所有性別爲男或者年齡在18歲以上的用戶

         DataRow[] drs4 =dtUsers.Select("sex = '男' or age >= 18");

5.篩選所有姓“夏”的用戶

         DataRow[] drs5 =dtUsers.Select("name like '夏%'");

6.篩選所有18歲以上的用戶且按從大到小的順序排序

         DataRow[] drs5 =dtUsers.Select("age >=18","age desc");

7.上面最後一種用法沒試過,有機會再列舉出來。
 
c# DataRow[]轉Datatable
方法一:

Datatable dt=new Datatable();

//添加列和數據(代碼省略)

DataRow[] drs = dt.Select("DeviceID='123'");
_dt = drs.CopyToDataTable();
dgvList.DataSource = _dt;

方法二:

DataRow[] dr = dt.Select("DeviceID='"+DeviceID+"'");
DataTable d = dt.Clone();
for (int i=0;i<dr.Length;i++)
{
d.ImportRow(dr[i]);
}


注意事項

1.上面的Select操作是不區分大小寫的(表字段不敏感,如pl-sql語法),如果需要區分大小寫,需要將DataTable的caseSensitive屬性設爲true,例如上表的

dtUsers.CaseSensitive = true;//區分大小寫

dataGridView 樣式

解決數據庫datatime數據在DataGridView裏不顯示秒的解決
 在數據庫中正確顯示有分有秒,到dataset裏的時候也有,但綁定到DataGridView裏的時候就沒有秒,解決辦法:

dataGridView1.Columns["record_time"].DefaultCellStyle.Format = "yyyy-MM-dd HH:mm:ss";

DataGridView 單元格內容格式內柔發生變化

  private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
        {
            if (e.ColumnIndex == 3)
            {
                switch (Convert.ToInt32(e.Value))
                {
                    case 0: e.Value = "現金支付";
                        e.CellStyle.ForeColor = Color.White;//更改顏色
                        e.CellStyle.BackColor= Color.Red; 
                        break;
                    case 1: e.Value = "加油卡支付";
                        break;
                    case 2: e.Value = "微信支付";
                        break;
                    case 3: e.Value = "POS機支付";
                        break;
                    case 4: e.Value = "現金賬戶支付";
                        break;
                    default:
                        break;
                }
            }
 

 

DataGridView

可以設置DataGridView的SelectionMode屬性爲FullRowSelect 實現左鍵點擊選取整行,右擊的話就需要在鼠標點擊事件裏面實現了


設置DataGridView的屬性MultiSelect爲false  這樣就使DataGridView不能夠選擇多行,只能選擇一行了

 private void dataGridView1_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
 //判斷索引位置
            if (e.ColumnIndex < 0 || e.RowIndex < 0) return;
            //判斷鼠標左右鍵
            if (e.Button == System.Windows.Forms.MouseButtons.Left)
            {
                if (dataGridView1.SelectedCells.Count != 0)
                {
                    //得到選中行的索引
                    int intRow = dataGridView1.SelectedCells[0].RowIndex;

                    //得到列的索引
                    int intColumn = dataGridView1.SelectedCells[0].ColumnIndex;

                    //得到選中行某列的值
                    string str = dataGridView1.CurrentRow.Cells[2].Value.ToString();
                    MessageBox.Show(str);
                }
            }
        }

 private void dgvCamera_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex < 0)
            {
                return;
            }
            nudCameraId.Value = Convert.ToInt32(dgvCamera.Rows[e.RowIndex].Cells["編號"].Value);
            txtCameraIp.Text = Convert.ToString(dgvCamera.Rows[e.RowIndex].Cells["IP"].Value);
             
        }

刪除數據:

 private void 刪除數據_Click(object sender, EventArgs e)
        {
            try
            {
                List<int> _lstID = new List<int>();
                int _deleNum = -1;
                if (dataGridView1.CurrentRow.Index >= 0)
                {

                    StringBuilder _sbMsg = new StringBuilder("確定刪除嗎?\r\n");
                    DialogResult result = MessageBox.Show(_sbMsg.ToString(), "操作提示", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
                    if (result == DialogResult.OK)
                    {
                        for (int i = this.dataGridView1.SelectedRows.Count; i > 0; i--)
                        {
                            int _iTagID = Convert.ToInt32(dataGridView1.SelectedRows[i - 1].Cells["Id"].Value);
                            _lstID.Add(_iTagID);

                        }
                        if (_lstID.Count > 0)
                        {
                            _deleNum = _db.Deleteable<User>().In(_lstID).ExecuteCommand();

                        }
                        查詢數據_Click(null, null);
                        textBox1.Text += "刪除成功!" + _deleNum + System.Environment.NewLine;
                    }
                    else
                    {
                        textBox1.Text += "選擇放棄刪除!" + System.Environment.NewLine;

                    }

                }
            }
            catch (Exception ex)
            {
                textBox1.Text += "刪除失敗!" + ex.Message + System.Environment.NewLine;
            }
        }

 

 

treeView1

 public void date()
        {
            //公司表
            DataTable company = db.Queryable<Base_Company>().ToDataTable();
            //部門表
            DataTable client = db.Queryable<Base_Client>().ToDataTable();
            foreach (DataRow dr in company.Rows)
            {
                //部門表綁定,作爲一級層次
                TreeNode tn_origine = new TreeNode();
                tn_origine.Text = dr["ClientName"].ToString();
                this.treeView1.Nodes.Add(tn_origine);
                //用戶表綁定
                DataRow[] dr_arr = client.Select();
                if (dr_arr.Length > 0)
                {
                    foreach (DataRow dr_sub in dr_arr)
                    {
                        TreeNode tn_sub = new TreeNode();
                        tn_sub.Text = dr_sub["ClientName"].ToString();
                        tn_origine.Nodes.Add(tn_sub);
                    }
                }
            }
        }
//點擊事件

 private void treeView1_NodeMouseClick(object sender, TreeNodeMouseClickEventArgs e)
        {
            if (Convert.ToInt32(e.Node.Level) > 0)
            {
                textEdit7.Text = e.Node.Text.ToString();
                // MessageBox.Show("您選擇的部門是:" + e.Node.Text.ToString(), "信息提示!");
                //if (e.Node.Text.Trim() == "銷售部門")   //如果當前節點的文本爲“系統退出”
                //{
                //    MessageBox.Show("部門分類展開所有節點1!", "軟件提示");
                //}
            }
        }

 

 

toolStrip1控件樣式

toolStrip 按鈕圖片大小的修改

toolStrip 按鈕圖片大小的修改

1.按鈕大小不能修改 //這個問題比較困擾我們,爲什麼不能修改呢,可能到時沒考慮到我們要修改按鈕大小

只需改變toolStrip 的一個屬性autosize爲false即可修改按鈕的高度

2.按鈕的圖片不能修改//這也是很大的一個問題

imagescaling設置爲none即可修改圖片大小了

3.toolStripDropDownButton1.TextAligon=BottomCenter

4.toolStripDropDownButton1.TextlmageRelation=Overlay

5.displaystyle可以控制顯示文本還是圖片還是兼得

6.實現鼠標懸停時圖標變大吧。

這樣寫:
toolStripButton1.ImageScaling = ToolStripItemImageScaling.None;
此屬性默認是SizeToFit,也就是自動將圖標圖像縮放到toolStrip合適的大小,
這個數值在toolStrip的AutoSize爲false且自己指定了toolStrip的長寬時用比較合適。而None則是指示圖標使用原始大小的Image,如果Image高過/寬過toolStrip,超出部分不可見。

所以在運行時想放大圖標圖像的話,你還需要準備一個大小比較合適的Image。
舉例,系統默認添加toolStrip高度是25,你可以關閉toolStrip的AutoSize然後調整高度到31,圖標都使用24x24的,當SizeToFit時它會變成16x16的,當需要放大時,改這個項的ImageScaling到None就會還原回24x24。

最後,佈局最好配合toolStrip的Padding和LayoutStyle屬性來做。

最後的最後,如果想要任意換圖標……還是改了ImageScaling後自己找幾組大小不同的圖標,需要的時候寫給子項的Image屬性好了。

pictureBox1控件屬性設置

 /// <summary>
        /// 選擇文件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void button2_Click(object sender, EventArgs e)
        {
            OpenFileDialog ofd = new OpenFileDialog();//新建打開文件對話框
            ofd.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Personal);//設置初始文件目錄
            ofd.Filter = "文本文件(*.txt)|*.txt|所有文件(*.*)|*.*";//設置打開文件類型
            if (ofd.ShowDialog(this) == DialogResult.OK)
            {
                //File.Delete(Application.StartupPath + "\\image\\123.jpg");
                //zoomauto(ofd.FileName, Application.StartupPath + "\\image\\", 156, 148);
                string FileName = ofd.FileName;//FileName就是要打開的文件路徑
                textBox2.Text = FileName;
                label3.Text= Path.GetFileName(ofd.FileName);//得到返回的文件名//下邊可以添加用戶代碼
            }
            pictureBox1.ImageLocation = textBox2.Text;
        }

DateTimePicker


DateTimePicker

//默認狀態下,DateTimePicker控件只顯示日期,如果想更改爲顯示時間,或日期+時間,需要做以下設置:
//控制日期或時間的顯示格式
this.DateTimePicker1.CustomFormat = "yyyy-MM-dd HH:mm:ss"
//使用自定義格式
this.DateTimePicker1.Format = DateTimePickerFormat.Custom
//時間控件的啓用
this.DateTimePicker1.ShowUpDown = True

MessageBox.Show

MessageBox.Show
 if (MessageBox.Show("是否刪除油罐信息", "注意", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) == DialogResult.Yes)
                {
//new 出你要問打開的新答窗體專
}else{
this.close();//或者
application.exit()屬;
}

 

自定義控件 代碼調用多個排序

    /// <summary>
        /// 加油機控件
        /// 
        /// </summary>
        public void Control()
        {
            try
            {
                int nber = Convert.ToInt32(Config.OilNumber);
                if (nber > 9)
                {
                    for (int i = 0; i < 9; i++)
                    {
                        Control.Refueller r1 = new Control.Refueller();
                        r1.Name = "jy" + i;
                        r1.Size = new Size(220, 281);
                        //r1.ResetText = "123123123123";
                        r1.Location = new Point(220 * i, 0);
                        r1.Show();
                        splitContainer1.Panel1.Controls.Add(r1);
                    }
                    nber = nber - 9;
                    if (nber > 0)
                    {
                        for (int i = 0; i < nber; i++)
                        {
                            Control.Refueller r1 = new Control.Refueller();
                            r1.Name = "jy" + i;
                            r1.Size = new Size(220, 281);
                            //r1.ResetText = "123123123123";
                            r1.Location = new Point(220 * i, 281);
                            r1.Show();
                            splitContainer1.Panel1.Controls.Add(r1);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章