2017-04-20 8 views
0

WinFormsでアプリケーションを開発していて、AccessデータベースのデータをComboboxに入力しています。データを入力したら、Comboboxのアイテムを使用して自分のラベルにデータを表示します。私はこのコードを使用しますCombobox選択されたインデックスイベントの内部次にC言語の長さに応じてラベルテキスト行を変更する

public void AutoCompleteBrand() 
{ 
    OleDbConnection con = new OleDbConnection(cs.DBConn); 
    con.Open(); 

    adapter = new OleDbDataAdapter(); 
    adapter.SelectCommand = new OleDbCommand(@"SELECT DISTINCT RTRIM(Phone) FROM tblPhone", con); 

    ds = new DataSet("ds"); 
    adapter.Fill(ds); 
    dtable = ds.Tables[0]; 
    cmbPhone.Items.Clear(); 

    foreach (DataRow drow in dtable.Rows) 
    { 
     cmbPhone.Items.Add(drow[0].ToString()); 
    } 
} 

:これは私がデータ移入しなければならないものである

private void cmbPhone_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    try 
    { 
     OleDbConnection con = new OleDbConnection(cs.DBConn); 
     con.Open(); 

     cmd = new OleDbCommand(@"SELECT DISTINCT 
            Brand, Phone, Tecnology 
            FROM tblPhone", con); 
     OleDbDataAdapter mAdapter = new OleDbDataAdapter(cmd); 
     DataSet mDataSet = new DataSet(); 
     OleDbDataReader mReader; 
     mReader = cmd.ExecuteReader(); 

     while (mReader.Read()) 
     { 
      string sBrand = mReader.GetString(0); 
      string sPhone = mReader.GetString(1); 
      string sTec = mReader.GetString(2); 

      lblBrand.Text = sBrand; 
      lblPhone.Text = sPhone; 
      lblTec.Text = sTec; 
     } 
    } 
    catch (Exception ex) 
    { 
      MessageBox.Show("Erro\nDetalhes: " + ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 

は、基本的な技術のラベルが大きすぎると、それは、長さの変化に達したときライン。それは可能ですか?

+0

ラベルのAutoSizeプロパティを設定しようとしましたか? – Digvijay

+0

これをfalseに設定し、私が望むものに応じてサイズを変更しますか? – Rekcs

+0

ああ。この目的のために、System.Drawing.GraphicsからMeasureStringを使用することができます。文字列が画面上にどのくらい広がっているかを取得し、それに従ってラベル幅を設定することができます。 – Digvijay

答えて

0

あなたの質問はあまり明確ではありません。 WPFまたはWinformsで作業していますか?あなたのようないくつか試すことができ

Basicly:リサイズ-if

を、あなたはあなたのラベルの本当のAutoSizeプロパティ=を設定することができます。

あなたはこのような何か試すことができます。

while (mReader.Read()) 
    { 
     string sBrand = mReader.GetString(0); 
     string sPhone = mReader.GetString(1); 
     string sTec = mReader.GetString(2); 

     lblBrand.Text = sBrand; 
     lblPhone.Text = sPhone; 
     lblTec.Text = sTec; 
     int wdth = sTec.Length * 16; //you can put another value depending your charachter size. 
     lblTech.Size = new Size(wdth, 22); 




    } 

それとも、あなたのラベルに修正幅を与えることができますし、新しい行を追加するために、あなたの文字列の長さを確認することができる場合:

 int lngth = 100; 
    if(sTech.Length > lngth) 
    { 
     sTech = sTech.SubString(0, lngth) + Environment.NewLine + sTech.SubString(lngth); 
    lblTech.Text = sTech; 
    } 

それが動作するかどうか教えてください。

+0

私はその質問を更新しました。私はその方法を使用します – Rekcs

0

ラベルには、AutoSizeMaximumSizeという2つのプロパティを設定するだけです。 AutoSizeはラベルの成長を(水平方向と垂直方向の両方に)指示しますが、MaximumSizeはそれを特定のWidthHeightに制限します。そう。次のようなことをしてください:

label1.AutoSize = true; 
label1.MaximumSize = new Size(100, 600); 
label1.Text = "test string which is pretty long"; 
関連する問題