所以我对之前的迭代有了很好的帮助,效果很好!
我尝试使用以下信息修改我的代码 Get property value from string using reflection in C#
但要么是我弄错了,要么我的课程设置方式不适用于该方法。
我使用了代码foreach (var checkbox in this.Controls.OfType<CheckBox>())
{
pdfFormFields.SetField(checkbox.Name, checkbox.Checked ? "Yes" : "No");
}
现在它已经被告知要使用一个课程来使我的班级更加普遍
public class Entries
{
///Some other Values
public string ColourW;
public bool CheckBox1 { get; set; }
public bool CheckBox2 { get; set; }
public bool CheckBox3 { get; set; }
public bool CheckBox4 { get; set; }
public bool CheckBox5 { get; set; }
public bool CheckBox6 { get; set; }
public bool CheckBox7 { get; set; }
public bool CheckBox8 { get; set; }
public bool CheckBox9 { get; set; }
}
我需要像上面这样的foreach语句,但是要将信息设置为类中的数据,但是我得到一个标识符预期错误。
foreach (var checkbox in this.Controls.OfType<CheckBox>())
{
Data.(checkbox.Name, checkbox.Checked ? "Yes" : "No");
}
非常感谢帮助,帮助解释代码的工作方式非常受欢迎!
提前抱歉,我是硬件家伙!修改
所以解决了大部分问题,感谢@Furkan Kambay成功进入课堂和课外,但由于某种原因,PDF上的复选框不会设置为相同的状态?
更长的解释,类设置表单工作正常所有组合框和文本字段调用时pdfFormFileds("Textx", Entries.ColourW);
工作正常然而PDF复选框在使用代码时不改变状态,我使用的是iTextSharp库
foreach (var box in Entries.CheckBoxes)
{
pdfFormFields.SetField(box.Key, box.Value ? "Yes" : "No");
}
设置PDF
string pdfTemplate = @"C:\Testing Templates\Pre V-Change Head Test Certificate Template.pdf";
string newFile = @"c:\temp\PDF\" + Entries.SerialNumber + " " + Entries.TestedWithCal + " Pre V-Change Head Test Certificate.pdf";
string Created;
PdfReader pdfReader = new PdfReader(pdfTemplate);
PdfStamper pdfStamper = new PdfStamper(pdfReader, new FileStream(newFile, FileMode.Create));
AcroFields pdfFormFields = pdfStamper.AcroFields;
答案 0 :(得分:1)
将您的课程编辑为:
public static class Entries
{
// ... all the other fields with static keyword
public static string ColourLRB;
public static string ColourW;
public static Dictionary<string, bool> CheckBoxes { get; } = new Dictionary<string, bool>(); // no set, so you can only modify this.
}
然后:
foreach (var checkbox in this.Controls.OfType<CheckBox>())
{
CheckBoxes[checkbox.Name] = checkbox.Checked;
}
我认为你可以使用LINQ查询将CheckBoxes映射到KeyValuePairs来改进foreach语句。如果你愿意,我可以编辑答案。
编辑,使用LINQ进行映射:(替换整个foreach)
var boxes = this.Controls.OfType<CheckBox>();
CheckBoxes = boxes.ToDictionary(b => b.Name, b => b.Checked);
edit2 ,再次设置
foreach(var box in Entries.CheckBoxes) // this is using static. For Singleton it would be "var box in Entries.Instance.CheckBoxes"
{
pdfFormFields.SetField(box.Key, box.Value ? "Yes" : "No");
}
答案 1 :(得分:0)
var entries = new Entries(); // looks to me like this class and its members should be static, no?
foreach (var checkbox in this.Controls.OfType<CheckBox>())
{
if(checkbox.Name == "CheckBox1") entries.CheckBox1 = checkbox.Checked;
else if(checkbox.Name == "CheckBox2") entries.CheckBox2 = checkbox.Checked;
else if(checkbox.Name == "CheckBox3") entries.CheckBox3 = checkbox.Checked;
// ...
}