1

リストボックスのデータを更新する必要があるときに、別のクラスから呼び出す静的メソッドが 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

1 つのクラスの非静的メソッドがある場合:

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

そして、別のクラスのオブジェクトから呼び出したい場合、そのオブジェクトには最初のオブジェクトへの参照が必要です。一般的な解決策は、最初のオブジェクトへの参照を 2 番目のオブジェクトのコンストラクターに渡すことです。

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 に答える