listbox1.items.add问题c#

时间:2015-03-13 15:09:46

标签: c# .net listbox

我正在进行病理学项目,在那里我必须显示医生和医生的名字。列表框中的患者姓名的单行提供了它们之间的空间。问题是,当医生的名字足够长时,它会将患者姓名转移到右侧&如果它很小(反之亦然)我不想要。我需要他们在特定的位置。 有没有办法让我可以为这些文本框值设置x和y坐标。我正在使用listbox1。我使用以下命令。

ListBox1.Items.Add("Dr."+textBox1.text+"              "+"Mrs."+textBox2.text);

然后我必须在A4纸上打印。

我知道这很简单,但我是C#的新手。请帮忙。

2 个答案:

答案 0 :(得分:0)

为listbboxitems创建一个datatemplate。

在您的datatemplate中创建两个彼此相邻的控件(一个用于Dr,另一个用于患者)。

示例:

<ListView x:Name="lbDatabases" Height="138" Width="498" Canvas.Left="44" Canvas.Top="146"  >
    <ListView.View >
        <ListView.ItemTemplate>
                    <DataTemplate>
                      <stackpanel Orientation=Horizontal>
                        <TextBlock />
                        <TextBlock />
                      </stackpanel>
                    </DataTemplate>
        </ListView.ItemTemplate>
    </ListView.View> </ListView>

答案 1 :(得分:0)

我唯一可以建议的是使用一个固定宽度的字体,它的所有字符都是相同的字符宽度。然后,您可以计算字符数并适当地测量出名称。非常长的名字可能会打破你的系统。

在专业应用程序中,我不会这样做。仅供参考。

固定宽度字体:http://en.wikipedia.org/wiki/Monospaced_font

这是代码(控制台是固定宽度的):

    static void Main(string[] args)
    {
        string doctorName = "Dr. Vee";
        string patientName = "Mrs. Park";

        string doctorName2 = "Dr. Longer";
        string patientName2 = "Mr. Ranker";


        Console.WriteLine(GetFinalString(doctorName, patientName));
        Console.WriteLine(GetFinalString(doctorName2, patientName2));
        Console.ReadLine();
    }

    private static string GetFinalString(string doctorName, string patientName)
    {
        int targetPatientLocation = 15;
        int length = doctorName.ToCharArray().Count();
        int targetPatientSpaces = targetPatientLocation - length;

        string final = doctorName;
        for (int i = 0; i < targetPatientSpaces; i++)
        {
            final += " ";
        }
        final += patientName;
        return final;
    }

这会产生你想要的字符串,但我再也不会这样做,因为只需要很长的医生名字来打破这种逻辑。