来自另一个类的列表框计数项目始终返回 0
Posted
技术标签:
【中文标题】来自另一个类的列表框计数项目始终返回 0【英文标题】:listbox count items from another class returns always 0 【发布时间】:2012-11-28 23:35:56 【问题描述】: 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;
【问题讨论】:
listbox2 是如何填充的?在我看来,您正在制作 Frm 的 new 实例,因此其中的 listbox2 仍然是空的。 所以我需要用其他班级的相同物品重新填充它??? 可能是用户在选择了框中的某些项目后单击了 btnPostText。您的第一个示例位于哪个班级?也许您需要获取对Frm
已打开实例的引用,而不是创建新实例。
@ميداني حر 否。您需要获取对您需要的实际 Frm 实例的引用。在这里,您正在创建一个新的。
我有 2 个课程 Frm
和 Class2
第一个例子在 Frm
【参考方案1】:
首先,一些基础知识。 Class2
和 Frm
是两个不同的类。 通常除非您在它们之间传递引用,否则它们无法看到彼此。
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
的表单的引用。
【讨论】:
【参考方案2】:那么您应该将对表单(或列表框)的引用作为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");
【讨论】:
Class2.PostImg(what should I pass here
,accesstoken,text,text);
如果您从表单的方法调用,则调用位于答案的末尾。以上是关于来自另一个类的列表框计数项目始终返回 0的主要内容,如果未能解决你的问题,请参考以下文章