如何避免让我的富文本框“滚动条”冻结?

时间:2015-08-07 19:05:35

标签: c# .net winforms richtextbox

我的问题是在.NET框架中使用C#创建一个包含富文本框(RTB)控件的简单表单应用程序。

简单地说,我遇到的问题是,当试图清除RTB的内容(.Text)时,滚动条不会消失。我想知道我使用RTB的方式是否存在任何内在错误。我道歉,但该网站不允许我发布图片。因此,如果对“不会消失”的含义存在误解,请询问!

首先,我使用以下代码片段将数据写入框中:

// append the new message
this.rtb_receive_0.Text += message;
this.rtb_receive_0.SelectionStart = this.rtb_receive_0.Text.Length;
this.rtb_receive_0.ScrollToCaret();

稍后,我使用以下代码清除RTB内容(RTB.Text):

this.rtb_receive_0.Text = String.Empty;
this.rtb_receive_0.Refresh();

在上面的代码中,我已经尝试使用“刷新”方法修复我的问题。但是它似乎没有完成这项工作。

当我清除RTB内容时,滚动条不会消失......我注意到如果我抓住另一个窗口并将其拖到应用程序的顶部,那么冻结的滚动条就会消失。此外,我可以最小化应用程序,然后再次最大化它,条形将消失。必须有一种方法可以防止这个冻结的滚动条在第一时间发生。

根据答案,这是阻止酒吧冻结的修复方法:

this.rtb_receive_0.Text = String.Empty;
this.rtb_receive_0.Clear();
this.rtb_receive_0.ScrollBars = RichTextBoxScrollBars.None;
this.rtb_receive_0.ScrollBars = RichTextBoxScrollBars.Vertical;
this.rtb_receive_0.Refresh();

4 个答案:

答案 0 :(得分:1)

您是否只是尝试以编程方式在RTB上设置Scrollbars属性?

myRichTextBox.ScrollBars = RichTextBoxScrollBars.None;

编辑:我想我误解了你需要的东西。搜索周围,我在另一个论坛上发现了这个类似的帖子:http://www.vbforums.com/showthread.php?793671-RESOLVED-RichTextBox-Visual-Bug

此用户根据列表视图中的选择设置RTB的值。设置新值并且不需要滚动条时,它不会重新绘制并仍然显示该栏。

似乎添加myRichTextBox.Clear(); myRichTextBox.Refresh();会有所帮助。在这种情况下,用户也以编程方式设置ScrollBars属性。

此外,您是否能够确定在需要滚动条之前RichTextBox中可以容纳多少行文本?我想这可能会因机器上的系统设置而异,但您可能只能以编程方式检查myrtb.Scrollbars = (myrtb.Lines.Length > X) ? Vertical : None;(请原谅psuedo代码语法)

答案 1 :(得分:0)

对我有帮助的只是两次调用refresh()方法。非常难看,但它确实起了作用。

嗯,经过更彻底的测试后,这个丑陋的修复证明并不是一个固定的修复。它有所帮助,但仍有一些故障。     刷新();     更新(); 似乎是一个更好的解决方案。

答案 2 :(得分:0)

我遇到了同样的问题。我通过调用Invalidate()方法解决了这一问题,该方法强制控件重新绘制。

const LocalStrategy = require("passport-local").Strategy;

var User = require("./models/user");

module.exports = function() {
  passport.serializeUser(function(user, done) {
    done(null, user._id);
  });

  passport.deserializeUser(function(id, done) {
    User.findById(id, function(err, user) {
      done(err, user);
    });
  });

  passport.use(
    "login",
    new LocalStrategy(function(username, password, done) {
      User.findOne({ username: username }, function(err, user) {
        if (err) {
          return done(err);
        }
        if (!user) {
          return done(null, false, { message: "No user has that username!" });
        }
        user.checkPassword(password, function(err, isMatch) {
          if (err) {
            return done(err);
          }
          if (isMatch) {
            return done(null, user);
          } else {
            return done(null, false, { message: "Invalid password." });
          }
        });
      });
    })
  );
};```

答案 3 :(得分:0)

我尝试过Refresh(); Update(); Invalidate();,但对我没有用。

我使用以下三行代码解决了这个问题:-

filename=str(input('Insert file name'))
results=pandas.dataframe()
results.to_csv("%s.csv"%filename)

尝试三行以上的内容。它将100%起作用。