2014-01-09 36 views
0

我的問題是,文本框的行屬性總是0可能是因爲代碼不知道有多少行文本框將呈現文本。所以我顯示3行和溢出是隱藏的,我想添加按鈕,將打開全文。但是隻有當文本框多於3行時才顯示按鈕。那麼有沒有什麼辦法可以在代碼中檢查。檢查多行文本框動態生成真代碼是否溢出

TextBox text = new TextBox(); 
text.ID = "Poruka" + i; 
text.Text = podaci.GetString(2); 
text.TextMode = TextBoxMode.MultiLine; 
text.Width = Unit.Pixel(535); 
text.Height = Unit.Pixel(45); 
text.Enabled = false; 
text.Style.Add("overflow", "hidden"); 
PanelSadrzaj.Controls.Add(text); 
if (text.Text.Length > 198 || ????) 
{ 
    Button vise = new Button(); 
    vise.ID = "Vise" + i; 
    vise.Text = "Prikaži cijelu poruku"; 
    vise.Width = Unit.Pixel(200); 
    vise.CssClass = "ButtonDodaj"; 
    vise.Font.Bold = true; 
    vise.OnClientClick = "PrikaziPoruku_Click"; 
    PanelSadrzaj.Controls.Add(vise); 
} 

編輯:
Soultion是添加此funcuton,並在的ContentTemplate調用它的UpdatePanel。
功能代碼:

function CheckOverflow() { 
     $("textarea").each(function() { 
      var threshold = 2; 
      var sender = $(this); 
      var lineCount = sender.val().split("\n").length; 
      var overflow = sender[0].offsetHeight < sender[0].scrollHeight - threshold; 

      var id = $(this).attr('id'); 
      id = id.slice(-1); 
      if (lineCount > 3 || overflow) { 
       $('#Buttonid' + id).show(); 
      } 
      else { 
       $('#Buttonid' + id).hide(); 
      } 
      alert(id); 
     }); 
    } 

的UpdatePanel代碼:

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <script type="text/javascript" language="javascript"> 
      Sys.Application.add_load(CheckOverflow); 
     </script> 
    <ContentTemplate> 
</asp:UpdatePanel> 

由於

回答

0

從你的例子中,我假定這是關於在Web應用程序a.k.a TextArea多文本框。爲了達到你想要的效果,你需要寫一點javascript並將其放入文檔中。

基本上你需要:

  1. 顯示器多少行已keyedin了的TextArea
  2. 檢查的任何內容溢出,
  3. 顯示/隱藏相應的更多按鈕

有您取得TextArea行數沒有內置的功能,但你可以通過計算有多少換行字符\n),而不是效仿。至於檢查的內容溢出可以通過元素的offsetHeight財產與其scrollHeight性能比較這麼做(假定沒有橫向溢出),例如:

$('#txtArea').on('input', function() { 
    var threshold = 2; // number of pixel to account for border and etc 
    var sender = $(this);   
    var lineCount = sender.val().split("\n").length; 
    var overflow = sender[0].offsetHeight < sender[0].scrollHeight - threshold; 

    if (lineCount > 3 || overflow) { 
    $('#btnMore').show(); 
    } 
    else { 
    $('#btnMore').hide(); 
    } 
} 

的jsfiddle演示:http://jsfiddle.net/ps58d/


更新

更改JSFiddle演示以匹配OP的示例:http://jsfiddle.net/ps58d/2/

0

我不認爲你可以做到這一點,因爲所有的行屬性不被設置的行數對用戶可見。

但我認爲你可以做的不是使用Width屬性,而是使用Columns屬性。這樣,每行可以有一定數量的字符(例如25,三行將是75個字符。)

例如,

string[] mylines = TextBox1.Text.Split('\n'); 
int maxCharCount = TextBox1.Rows * TextBox1.Columns; 

if (mylines.Count() > 3 || TextBox1.Text.Length > maxCharCount) 
{ 
     //Show Button 
} 
+0

問題是如果例如用戶鍵入50個字符和2個換行符將是4行將此代碼識別。 –

+0

是的,如果文本有換行符,代碼是無用的:/ –

+0

你需要添加邏輯來計算馬車和新的線返回,即四行文字看起來像「Line1 \ r \ nLine2 \ r \ nVeryLong Line 3 \ r \ n最後一行「。我也認爲你需要小心使用固定寬度的字體,否則你會遇到問題。 – Damon

0

由於您使用的是MultilineTextBox,整個文本是在一行,它是僅用於顯示的目的分裂。爲了找到行的實際數量,你必須使用MeasureString如下:

using (Graphics g = CreateGraphics()) 
    { 
     SizeF size = g.MeasureString(textBox1.Text, textBox1.Font); 
     int linesCount = (int)(size.Height/textBox1.Font.GetHeight()); 
    } 
+0

名稱'CreateGraphics'在當前上下文中不存在,參數2:無法從'System.Web.UI.WebControls.FontInfo'轉換爲'System.Drawing.Font' –

+0

'CreateGraphics'是Control的成員。你可以以任何形式使用它,或者使用'textBox1.CreateGraphics()'。 –