繁体   English   中英

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

[英]listbox count items from another class returns always 0

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

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

Frm可以在Class2中看到PostImage方法,因为它被标记为static 但它不会走另一条路。 所以你需要在调用PostImage时传递对Frm的引用。 最简单的方法是在方法签名中包含它:

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的表单的引用。

然后,您应该PostImg表单(或listBox)的引用作为PostImg方法的参数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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM