如何从另一种形式读取类的属性值?

时间:2019-07-04 13:01:50

标签: c#

我在一个cs文件中具有以下类和方法。我已经在方法内部为类分配了属性值。

如何使用另一种形式读取分配给ReturnValue类中的属性的值。

    public class ReturnValues
    {
        public int startdate { get; set; }
        public string imageurl { get; set; }
        public string headline { get; set; }
        public string fulldownloadLink { get; set; }
        public string imagecopyright { get; set; }
        public string filename { get; set; }
        public int PreviousFileDate { get; set; }
    }

string prtemp_path = Path.GetTempPath();

    public void BingWallpaepr()
    {
        ReturnValues returnValues = new ReturnValues();


        string baseurl = "http://bing.com";

        //set the link for XML
        var xml_link = "http://www.bing.com/HPImageArchive.aspx?format=xml&idx=0&n=1&mkt=en-US";
        string xmlStr;
        using (var wc = new WebClient())
        {
            xmlStr = wc.DownloadString(xml_link); //Downloads the xml page

            var xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(xmlStr); //loads the xml page to the string

            XmlElement root = xmlDoc.DocumentElement;
            XmlNodeList nodes = root.SelectNodes("/images/image");
            foreach (XmlNode node in nodes)
            {

                returnValues.imageurl = node["url"].InnerText;
                returnValues.headline = Regex.Replace(node["headline"].InnerText, "[^A-Za-z0-9 _]", ""); 
                returnValues.imagecopyright = node["copyright"].InnerText;
                returnValues.startdate = int.Parse(node["startdate"].InnerText);

                //download the new image
                returnValues.filename = string.Format(@"\bing_{0}.jpg", returnValues.startdate);
               // MessageBox.Show(returnValues.filename.ToString());

                returnValues.fulldownloadLink = baseurl + returnValues.imageurl;
                wc.DownloadFile(new Uri(returnValues.fulldownloadLink), prtemp_path + returnValues.filename);
}

在另一种形式中,我试图获取如下属性值:

namespace CrimePortal
{
    public partial class Loginfrm : Form
{

    public Loginfrm()
    {
        InitializeComponent();

       PlatformCommands.ReturnValues returnValues = new PlatformCommands.ReturnValues();

        MessageBox.Show(returnValues.startdate.ToString());
}
}

但它返回null。

1 个答案:

答案 0 :(得分:1)

您将BingWallpaper声明为void。不应该这样声明应如下所示:

public ReturnValues BingWallpaepr()

方法结束时,您应该return returnValues;

然后,从您的第一个表单(登录)开始,您需要引用另一种表单的 instance ,我们称其为platformCommands。有很多方法可以做到这一点,这取决于您选择如何设计和构造UI。

例如,如果要在显示MessageBox之前实例化平台命令,则可以

var platformCommands = new PlatformCommands();
PlatformCommands.ReturnValues returnValues = platformCommands.BingWallpaper();
MessageBox.Show(returnValues.startdate.ToString());