4
            Frm Form1 = new Frm();
                //here I always get the count =0
            if (Form1 .listBox2 .SelectedItems .Count  > 0)
            {
                string item;
                foreach (int i in Form1.listBox2.SelectedIndices)
                {
                    item = Form1.listBox2.Items[i].ToString();

Frmで同じことをすると、選択されたアイテムの実際の数が得られます。Frmのコードは次のとおりです

    public  void btnPostText_Click(object sender, EventArgs e)
    {
        listBox2.ClearSelected();
        if (listBox1.SelectedItems.Count > 0)
        {
            foreach (int index in listBox1.SelectedIndices)
                listBox2.SetSelected(index, true);
        }

私のプログラムから、ログインプロセスの後、ユーザーがlistBox2のlitBox1に投稿したいグループ名を選択した後、Facebookで同時に複数のグループに投稿しようとしています。そこにグループIDがあります同じ順序なので、ユーザーが btnPostText をクリックすると、選択範囲が listBox1 から listBox2 に移動します。PostImg public static bool PostImg( , , ,)

Class2 には Postimg と同様の post プロシージャが含まれており、投稿された場​​合は true、そうでない場合は false を返します。

ここでは Frm で呼び出しています

  if (Class2.PostImage(AppSettings.Default.AccessToken, textbox1.Text, textboxpic.Text) == true)
                MessageBox.Show("Post Done");

Class2 のコードは

    public static bool PostImage(string AccessToken, string Status, string ImagePath) 
    {
        try
        {
            Frm Frm = new Frm();

            if (Frm .listBox2 .SelectedItems .Count  > 0)
            {
                string item;
                foreach (int i in Frm.listBox2.SelectedIndices)
                {
                    item = Frm.listBox2.Items[i].ToString();
                    groupid = item;


                    FacebookClient fbpost = new FacebookClient(AccessToken);
                    var imgstream = File.OpenRead(ImagePath);
                    dynamic res = fbpost.Post("/" + groupid + "/photos", new
                   {
                       message = Status,
                       File = new FacebookMediaStream
                       {

                           ContentType = "image/jpg",
                           FileName = Path.GetFileName(ImagePath)
                       }.SetValue(imgstream)

                   });

                    result = true;

                }
            }
            return result;
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message);
            return false;
        }
4

2 に答える 2

3

まず最初に、いくつかの基本事項を説明します。Class2Frmは 2 つの異なるクラスです。通常、それらの間で参照を渡さない限り、お互いを見ることはできません。

FrmPostImageとしてマークされているため、Class2 内のメソッドを見ることができますstatic。しかし、それは逆にはいきません。Frmしたがって、 を呼び出すときにへの参照を渡す必要がありますPostImage。これを行う最も簡単な方法は、メソッド シグネチャに含めることです。

public static bool PostImage(string AccessToken, string Status, string ImagePath, Frm MyForm) 

今、あなたはそれを呼び出します:

if (Class2.PostImage(AppSettings.Default.AccessToken, textbox1.Text, textboxpic.Text, this) == true)

this関数でパラメーターとして渡した方法に注目してください。これは内部で使用するリファレンスですPostImage:

if (MyForm.listBox2.SelectedItems .Count  > 0)

などなど。変数MyFormは、 を呼び出したフォームへの参照になりましたClass2.PostImage

于 2012-11-29T00:36:01.813 に答える