在WinForms应用程序中清除多行文本框的问题

时间:2012-02-06 13:14:53

标签: winforms textbox

我的应用中有一个多行TextBox,我想要清除它的文字。

问题在于,当我使用

清除文本时
textBox.Text = "" 
or 
textBox.Clear()

仅清除第一行。其他行仍然存在,但无法删除,如果我开始在文本框中输入,其他行将被覆盖,这使我认为这是一个重新绘制问题,但无法弄清楚为什么会发生这种情况

文本框位于表单内的自定义用户控件中,可以最小化。表单最小化然后恢复后出现问题。

我尝试在控件和文本框上调用Refresh来触发重新绘制,但它不起作用。

是否有其他方法可以触发重绘事件来解决此问题?不知道我在这里做错了什么。

编辑:

以下是代码示例。调用ShowForm方法来恢复最小化的表单。

    public static void ShowForm()
    {
       if (!myForm.Visible)
       {
          myForm.PopulateForm();
          myForm.Show();
          myForm.Activate();
          myForm.WindowState = FormWindowState.Normal;
       }
    }

PopulateForm内部(这是myForm的方法),我清除了文本框的文字:

   public void PopulateForm()
   {
       this.myControl.myTextBox.Clear(); 
   }

this.myControl是包含文本框的用户控件

2 个答案:

答案 0 :(得分:0)

正如我所怀疑的,这是由于一个重复的问题。它是由用户控件的DoubleBuffered属性设置为false引起的。

将其设置为true后,正在正确呈现文本框。

答案 1 :(得分:0)

我在使用多行文本框时遇到了类似的问题,我只是在 select ssc.id ,mgz.Title ,tli.id ,tli.Time from Subscription ssc join Person prs on ssc.PersonID = prs.id and prs.id = 3 join Magazine mgz on mgz.id = ssc.MagazineID and mgz.from <= date.today() and mgz.until > date.today() left join TimeLogedIn tli on tli.SubscriptionID = ssc.id and tli.DateOnline = date.today() 之后做了一个 class Magazine(models.Model): Title = models.CharField(max_length=100L) from = models.Datefield() until = models.Datefield() Persons = models.ManyToManyField(Person, through='Subscription') class Person(models.Model): user = models.OneToOneField(User, on_delete=models.CASCADE) Magazines = models.ManyToManyField(Magazine, through='Subscription') class Subscription(models.Model): MagazineID = models.ForeignKey(Magazine,on_delete=models.CASCADE) PersonID = models.ForeignKey(Person,on_delete=models.CASCADE) class TimeLogedIn(models.Model): SubscriptionID = models.ForeignKey('Subscription', on_delete=models.CASCADE) DateOnline = models.DateField() Time = models.DecimalField(max_digits=5, decimal_places=2)