Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Irongeek 检查动态生成的多行文本框真代码是否溢出_Irongeek_C#_Asp.net - Fatal编程技术网

Irongeek 检查动态生成的多行文本框真代码是否溢出

Irongeek 检查动态生成的多行文本框真代码是否溢出,irongeek,c#,asp.net,Irongeek,C#,Asp.net,我的问题是textbox的Rows属性始终为0,可能是因为代码不知道textbox将呈现多少行。所以我显示3行,溢出被隐藏,我想要添加按钮来打开全文。但只有当文本框中的行数超过3行时,按钮才会显示。那么,有没有什么方法可以在代码中检查这一点呢 TextBox text = new TextBox(); text.ID = "Poruka" + i; text.Text = podaci.GetString(2); text.TextMode = TextBoxMode.MultiLine; te

我的问题是textbox的Rows属性始终为0,可能是因为代码不知道textbox将呈现多少行。所以我显示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);
}
编辑:
解决方案是添加此函数,并在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);
        });
    }
函数CheckOverflow(){
$(“textarea”)。每个(函数(){
var阈值=2;
var sender=$(此值);
var lineCount=sender.val().split(“\n”).length;
var overflow=sender[0]。offsetHeight3 | |溢出){
$('#Buttonid'+id).show();
}
否则{
$('#Buttonid'+id).hide();
}
警报(id);
});
}
UpdatePanel代码:

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

我认为您无法做到这一点,因为rows属性所做的只是设置用户可见的行数

但是,我认为您可以不使用
Width
属性,而使用
Columns
属性。这样,您可以在每行中设置一定数量的字符(例如,25,三行为75个字符)

e、 g


由于您使用的是一个
多行
文本框
,因此整个文本在一行中,并且仅为显示目的而拆分。为了找到实际行数,必须使用
MeasureString
,如下所示:

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

从您的示例中,我假设这是关于Web应用程序中的多行文本框,也称为
TextArea
。要实现您想要的,您需要编写一点javascript并将其放入文档中

基本上你需要:

  • 监控
    文本区域中键入了多少行
  • 检查是否有任何内容溢出
  • 相应地显示/隐藏“更多”按钮
  • 没有用于获取
    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();
      }
    }
    
    $('#txtArea')。在('input',function()上{
    var threshold=2;//用于边框等的像素数
    var sender=$(此值);
    var lineCount=sender.val().split(“\n”).length;
    var overflow=sender[0]。offsetHeight3 | |溢出){
    $('#btnMore').show();
    }
    否则{
    $('#btnMore').hide();
    }
    }
    
    JSFIDLE演示:


    更新


    更改JSFIDLE demo以匹配OP的示例:

    问题是,例如,如果用户键入50个字符和2个换行符,这段代码是否会识别出这一点。您需要添加逻辑来计算回车和换行符,即四行文本看起来像“Line1\r\nLine2\r\n换行符3\r\nLast line”。我还认为您需要小心使用固定宽度字体,否则会遇到问题。我已经用我建议的内容更新了示例代码,但没有在所有场景中对其进行测试。不,它不适用于所有场景,因为新行字符是由程序添加的,而文本框是呈现的。名称“CreateGraphics”不适用于所有场景在当前上下文中,参数2:无法从“System.Web.UI.WebControl.FontInfo”转换为“System.Drawing.Font”
    CreateGraphics
    Control
    的成员。您可以以任何形式使用它,或使用
    textBox1.CreateGraphics()
    $('#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();
      }
    }