我在一个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。
答案 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());