我正在尝试绘制一些项目列表并将其打印为此格式的文件
items amount
maize $50
meat $100
我尝试过使用stringbulder
private List<sting> _Items;
private List<string> _Uprices;
//list of items
StringBuilder myItems = StringBuilder();
foreach (var item in _Items) {
myItems.AppendLine(item.PadRight (30));
}
//list of prices
StringBulder prices = StringBuilder();
foreach (var item in _Uprices) {
prices.AppendLine(item.PadRight (30));
}
然后
Graphics g = e.Graphics();
g.DrawString(myItems,new Font("Times New Roman",12),new SolidBrush(Color.Black),20,20);
但是我到这里的输出很糟糕 如果我将foreach项添加到字符串,则打印最后一个值。 请有人帮我解决这个问题吗?
我做错了,请搜索谷歌,找不到答案。
更新:
请检查此代码段 here
我认为这个问题并不是很清楚。但我已经用源代码链接更新了它,打印到OneNote。
答案 0 :(得分:1)
要打印到文件,您需要使用文件和文本编写器。
if (!File.Exists(path))
File.Create(path);
TextWriter tw = new StreamWriter(path);
tw.WriteLine("items ammount");
tw.Close();
为了并排产生两件事,这是一种方式。
if (_Items.Count == _Uprices.Count)
{
for (int i = 0; i < _Items.Count; i++)
{
tw.WriteLine(String.Format("{0} {1}",_Items[i],_Uprices[i]));
}
}
我不会给出完整的脚本。混合搭配以更好地理解它。
答案 1 :(得分:0)
如果没有更多信息,很难分辨,但我认为你想用一个for循环创建你的字符串。
private List<sting> _Items;
private List<string> _Uprices;
StringBuilder myItems = StringBuilder();
foreach (var i = 0; i < _Items.Count; i++) {
myItems.AppendLine(_Items[i].PadRight(30) + _Uprices[i]);
}
Console.Write(myItems);
答案 2 :(得分:0)
Dictionary<string, string> dictionary = new Dictionary<string, string>();
答案 3 :(得分:0)
为什么不使用字典而只打印带有值的键?
然后尝试这个
int y=20;
foreach(var keyValuePair in dictionary) {
g.DrawString(keyValuePair.Key+"\t"+keyValuePair.Value, new Font("Times New Roman",12, new SolidBrush(Color.Black),20,y+=15);
}
答案 4 :(得分:0)
目前尚不清楚,因为您说要写入文件但使用Graphics
。
假设输出是文件:
使用Linq的Zip
和C#6.0的字符串插值,您可以这样做:
List<string> _Items = new List<string> { "maize", "meat" };
List<string> _Uprices = new List<string> { "$50", "$100" };
// For prior c# 6 use here string.Format
var lines = _Items.Zip(_Uprices, (item, price) => $"{item} {price}").ToList();
using (var stream = File.CreateText(@"C:\myfile.txt"))
{
stream.WriteLine("Items - Amount");
lines.ForEach(stream.WriteLine);
}
//Output:
// maize $50
// meat $100
对于OneNote输出,将上面的using
替换为:
foreach(var line in lines)
{
g.DrawString(line,new Font("Times New Roman",12),new SolidBrush(Color.Black),20,20);
}
我仍然建议对数据使用一些其他结构,比如一个有2个属性的类,而不是2个按索引关联的列表
答案 5 :(得分:0)
我建议 Linq ,Zip
确切地说:
绘制所有组合线:
string myItems = string.Join(Environment.NewLine, _Items
.Zip(_Uprices, (item, price) => $"{item} {price}"));
g.DrawString(myItems, ...);
如果您想将这些行放到文件:
File.WriteAllLines(@"C:\MyFile.txt", _Items
.Zip(_Uprices, (item, price) => $"{item} {price}"));
最后,您可以实现结果(例如,作为数组)并绘制或写入文件:
string[] result = _Items
.Zip(_Uprices, (item, price) => $"{item} {price}")
.ToArray();
...
// draw all the lines in one go
g.DrawString(string.Join(Environment.NewLine, result) ...);
...
// draw line after line (in case you have other lines/text to output)
for (int i = 0; i < result.Length; ++i) {
g.DrawString(result[i], ...);
...
}
...
File.WriteAllLines(@"C:\MyFile.txt", result);