来自另一个类的列表框计数项始终为0

时间:2012-11-28 23:35:57

标签: c# winforms c#-4.0 listbox

            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);
        }

从我的程序我试图在登录过程中同时在facebook上发布多个组,用户选择他/她想要发布到listBox2中litBox1的组名称,其中有组ID( s)以相同的顺序,所以当用户点击btnPostText我将选择从listBox1移动到listBox2',,,现在在Class2`我想知道是否在listBox2中选择了任何项目,第一个代码在Class2中。 PostImg public static bool PostImg(,,,)

Class2包含post过程,就像Postimg一样,如果发布则返回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;
        }

2 个答案:

答案 0 :(得分:3)

首先,一些基础知识。 Class2Frm是两个不同的类。 通常除非您在它们之间传递引用,否则它们无法看到对方。

Frm可以在Class2中看到PostImage方法,因为它被标记为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

的表单的引用

答案 1 :(得分:1)

然后你应该将对表单(或listBox)的引用作为PostImg方法的参数传递。

public static bool PostImg(Frm form, string AccessToken, string Status, string ImagePath )
{
    try
    {
        if (form.listBox2.SelectedItems.Count  > 0)
        {
            string item;
            foreach (int i in form.listBox2.SelectedIndices)
            {
                item = form.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;
    }
}

并从表单中的方法调用它:

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