1

当我需要更新列表框中的数据时,我有一个从另一个类调用的静态方法。但后来我需要滚动列表框到最后一项。这是代码:

 public static void updateMessages()
  {
      MyDatasCurentUser.Clear();//clear messages from previewous user from datas
      foreach (var items in UniDB.returnlistOfMessagesData(IdOfChoosenUser, MainContentPage.myID))
      {
          _mydataCurentUser.Add(new BindingData
          {
              MessengerReadTime = new DateTime(items.readTime.Year, items.readTime.Month, items.readTime.Day, items.readTime.Hour, items.readTime.Minute, 0),
              MessengeFullName = items.senderName,
              MessengerTime = new DateTime(items.sendTime.Year, items.sendTime.Month, items.sendTime.Day, items.sendTime.Hour, items.sendTime.Minute, 0).ToString("dd.MM.yyyy - HH:mm"),
              MessengerMessage = items.message,
              MessengerIsFromMe = items.isFromMe,
          });
      }

      lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());
  }

但是我得到错误无法访问静态上下文中的非静态字段:lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());

lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());当调用方法 updateMessages() 时,有什么办法可以做到这一点?

4

1 回答 1

1

如果您有一个类的非静态方法:

class Form1
{
   public void UpdateMessages()
   {   
       // ...
       lbChoosenMessagesUsers.ScrollIntoView(lbChoosenMessagesUsers.Items.Last());
   }
}

如果您想从不同类的对象调用它,该对象将需要对第一个对象的引用。一个常见的解决方案是将第一个对象的引用传递给第二个对象的构造函数:

class OtherClass
{  
   Form1 _form;
   OtherClass(Form1 form)
   {
       _form = form;
   }

   void Method()
   {
       //can access the methods of the other object
       _form.UpdateMessages();
   }
}

或者,您可以稍后传递对象:

class OtherClass
{  
   public void Method(Form1 form)
   {
       form.UpdateMessages();
   }
}
于 2013-10-16T10:18:35.687 回答