Текст в фигурах

 
0
 
.NET
ava
WPFnoob | 22.09.2012, 10:46
Добрый день. Получил задание , сделать на WPF следущую программу:

1) Программа рисует фигуры с файла, в файле хранятся координаты точек, прога их считывает и выводит на экран.
2) В эти фигуры надо вписать текст, из текстбокса(т.е. по сути пользователь сам вводит текст, жмет enter и текст отображается в фигуре). Фишка в том что текст должен иметь МАКСИМАЛЬНЫЙ размер шрифта (подгонять его должна программа) и располагаться по вертикали или по горизонтали, что должно проверяться в коде и решаться прогой. Перенос(если понадобится) строго по словам, не более 2х строк

1ый пункт я сделал она считывает координаты и выводит на экран фигуры. Вот код:

int i = 1;
int cancount = 0;



public Window1()
{
InitializeComponent();
int kol = 0;
int count = 0;

OpenFileDialog temp = new OpenFileDialog();
temp.FileName = "1";
temp.Title = "Открытие файла";
if (temp.ShowDialog()==true)
{
StreamReader read = new StreamReader(temp.FileName, Encoding.Default);
string n;
while ((n = read.ReadLine()) != null)
{
Polyline figure1 = new Polyline();
int z = 0;
int dop = 0;
int j = 0;
int i = 0;
while (z + dop < n.Length)
{
if (n[z + dop] == ' ')
{
z += dop + 1; dop = 0;
count++;
}
else dop++;
}

z = 0;
dop = 0;

List<double> mas1 = new List<double>();

do
{
if (n[z + dop] == ' ')
{
string k = n.Substring(z, dop);
mas1.Add(Convert.ToDouble(k));
z += dop + 1; dop = 0;

}
else dop++;
}
while (z + dop < n.Length);

List<Point> massiv = new List<Point>();
Point point = new Point();

for (int ii = 0, jj = 0; ii < count; ii++)
{
if (ii % 2 == 0)
{
point.X=mas1[ii];
kol++;
}
else
{
point.Y=mas1[ii];
kol++;
}

if (kol == 2)
{
massiv.Add(point);
jj++; kol = 0;
}

}

for (int iii = 0; iii < count / 2; iii++)
figure1.Points.Add(massiv[iii]);
figure1.Points.Add(massiv[0]);
figure1.Stroke = Brushes.Red;
canvas1.Children.Add(figure1);
count = 0;
massiv.Clear();
mas1.Clear();
cancount++;
}

read.Close();
}
}

а вот со вторым печалька =(
private void textBox1_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.Return)
{
Point point1 = new Point();
Label label1 = new Label();
Polyline newpoly = new Polyline();
newpoly = canvas1.Children[i] as Polyline;
point1 = newpoly.Points[0];

if (i <= cancount)
{
i++;

canvas1.Children.Add(label1);

Canvas.SetLeft(label1, point1.X);
Canvas.SetTop(label1, point1.Y);
label1.Content = textBox1.Text.ToString();
}
// MessageBox.Show(label1.ActualWidth.ToString());
//Label asd = new Label();
//canvas1.Children.Add(asd);




else
{
i = 1;
for (int j = 0; j < canvas1.Children.Count; j++)
if (canvas1.Children[j].GetType().Name.Equals("Label"))
canvas1.Children.RemoveAt(j);
}

}
}




}
}

мало того что она не работает как надо, так еще и критует

я не знаю , что делать =( сдавать в среду уже =( Помогите пожалуйста
Comments (1)
ava
WPFnoob | 22.09.2012, 13:17 #
Решил сделать через TextBlock

tb.Text = textBox1.Text.ToString();

canvas1.Children.Add(tb);


while (tb.Width < canvas1.Children[i].RenderSize.Width)
{



tb.FontSize++;


}

но шрифт не увеличивается
если в цикле добавить
tb.Width++;
шрифт увеличивается но явно вылезает за пределы фигуры (canvas1.Children[i])
Please register or login to write.
Firm of day
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Contributors
  WPFnoob
advanced
Submit