我現(xiàn)在添加了一個(gè)textbox控件,在添加了一個(gè)button,我希望完成的是當(dāng)點(diǎn)擊Button的時(shí)候就彈出對(duì)話框,選擇需要打開的文件,選擇文件確定后,該文件的路徑就復(fù)制到textbox中。
button的click事件里的代碼這樣寫就OK了
OpenFileDialog ofd = new OpenFileDialog();
ofd.Title = "打開";
ofd.Filter="所有文件|*.*"; 這是設(shè)置擴(kuò)展名。
if (ofd.ShowDialog() == DialogResult.OK)
{
TextBox1.text = ofd.FileName;
}
C#,怎樣得到本文件當(dāng)前所在路徑?
private void button1_Click(object sender, System.EventArgs e)
{
string strPath = Application.StartupPath;
textBox1.Text = strPath ;
}
生成后的exe文件在什么目錄,strPath就是那個(gè)目錄名
DataGridView顯示行號(hào)的幾種方法
文章錄入:7747.Net 責(zé)任編輯:7747.Net 194
【字體:小 大】
方法一:
網(wǎng)上最常見的做法是用DataGridView的RowPostPaint事件在RowHeaderCell中繪制行號(hào):
RowPostPaint
private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) { try { //添加行號(hào) SolidBrush v_SolidBrush = new SolidBrush(dataGridView1.RowHeadersDefaultCellStyle.ForeColor); int v_LineNo = 0; v_LineNo = e.RowIndex + 1; string v_Line = v_LineNo.ToString(); e.Graphics.DrawString(v_Line, e.InheritedRowStyle.Font, v_SolidBrush, e.RowBounds.Location.X + 15, e.RowBounds.Location.Y + 5); } catch (Exception ex) { MessageBox.Show("添加行號(hào)時(shí)發(fā)生錯(cuò)誤,錯(cuò)誤信息:" + ex.Message, "操作失敗"); } }
但是這種方法在大數(shù)據(jù)量的時(shí)候性能比較差,每次滾動(dòng)數(shù)據(jù)都會(huì)觸發(fā)RowPostPaint事件。
方法二:
我的做法是給每行的HeaderCell賦值。
在網(wǎng)上發(fā)現(xiàn)有人提到這種做法,但是因?yàn)樽詈蟮娘@示問題而選擇了上面的方法。具體問題就是,在行號(hào)超過2位,如100、1000,在選中該行時(shí),DataGridView的行指示符?會(huì)把行號(hào)往右擠,導(dǎo)致現(xiàn)實(shí)不全,100的時(shí)候顯示? 10。
其實(shí)還是RowsHeaderWidth的大小有問題,將該列的寬度放大,行號(hào)顯示的也沒問題!
不知道他們有沒有試過,上面繪制行號(hào)的方法在大行號(hào)的情況下顯示也會(huì)有問題。
既然知道問題所在就要找到相應(yīng)的解決方法。
具體做法是將DataGridView的RowsHeaderWidthSizeMode屬性 設(shè)置為AutoSizeToAllHeaders或者AutoSizeToDisplayedHeaders,這樣自動(dòng)設(shè)置寬度就不會(huì)出現(xiàn)行指示符擠壓行號(hào)的情況了。
對(duì)于每次DataGridView的行變化,我們都去更新行號(hào),用RowsAdded和RowsRemoved事件。
代碼如下:
RowsAdded & RowsRemoved
private void DataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { for (int i = 0; i < e.RowCount; i++) { this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString(); } for (int i = e.RowIndex + e.RowCount; i < this.DataGridView1.Rows.Count; i++) { this.DataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.DataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString(); } } private void DataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e) { for (int i = 0; i < e.RowCount; i++) { this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.DataGridView1.Rows[e.RowIndex + i].HeaderCell.Value = (e.RowIndex + i + 1).ToString(); } for (int i = e.RowIndex + e.RowCount; i < this.DataGridView1.Rows.Count; i++) { this.DataGridView1.Rows[i].HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleRight; this.DataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString(); } }