Отправляет email-рассылки с помощью сервиса Sendsay

RFpro.ru: Microsoft .NET

  Все выпуски  

RFpro.ru: Microsoft .NET


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты данной рассылки

Гаряка Асмик
Статус: Профессор
Рейтинг: 5363
∙ повысить рейтинг »
Micren
Статус: Профессионал
Рейтинг: 1626
∙ повысить рейтинг »
Andrew Kovalchuk
Статус: Профессионал
Рейтинг: 616
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / Microsoft .NET : C#

Номер выпуска:192
Дата выхода:18.11.2010, 16:00
Администратор рассылки:Alexey G. Gladenyuk (Управляющий)
Подписчиков / экспертов:171 / 57
Вопросов / ответов:1 / 1

Вопрос № 180717: Здравствуйте, уважаемые эксперты. Мне нужна Ваша помощь. Я написал программу по построению электрических схем на языке C#. Но у меня маленькая проблема - некорректное перетаскивание элементов цепи. В моем проекте сделано перетаскивание ...



Вопрос № 180717:

Здравствуйте, уважаемые эксперты. Мне нужна Ваша помощь.

Я написал программу по построению электрических схем на языке C#. Но у меня маленькая проблема - некорректное перетаскивание элементов цепи.

В моем проекте сделано перетаскивание элементов... но это перетаскивание малость некорректно. Т.е., когда пользователь нажимает на какой-либо элемент цепи, чтобы его переместить, то этот элемент начинает располагаться слева-наверху по отношению к курсору мыши и перемещается.

У меня к Вам просьба: не могли бы Вы исправить эту ошибку? Т.е., чтобы пользователь зажал левую кнопку мыши на каком-либо элементе, в какой-либо его области и стал его перетаскивать нормально.
Если Вы справитесь с этой задачей, пожалуйста, скиньте мне исходники проекта на e-mail: D11018@yandex.ru

Вот мой проект:
http://narod.ru/disk/27406851000/Project.rar.html

Заранее спасибо.

Отправлен: 13.11.2010, 15:40
Вопрос задал: Абатуров Евгений Александрович (Посетитель)
Всего ответов: 1
Страница вопроса »


Отвечает Evgenijm (10-й класс) :
Здравствуйте, Абатуров Евгений Александрович!

Так и не получилось у меня справиться с DrawingVisual. Переделал на UserControl. Вы можете теперь доделать мою версию или подогнать свою. Из xaml я убрал совсем уж лишние элементы. Желательно подправить именно описания контуров, чтобы они были все одинакового размера. Ну и желательно разобраться с правильным использованием Grid. А меню я вообще такое не ожидал :)

Лучше всего работает самый простой метод переноса:
1 При зажатии мышкой контрола запоминаем его и точку, в которой его зажали.
2 При сдвиге мышки зажатая точка опять должна оказаться под указателем
3 При поднятии мышки просто оставляем контрол в покое.

При этом первый эвент срабатывает на контроле, а остальные 2 - на контейнере, иначе могут быть неприятные сюрпризы с отображением.

Создание контролов тоже желательно подстроить под каждый по отдельности. У меня оно не очень красиво выглядит. Можете попробовать шаблоны сделать.
XAML:
Код:
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:circuit"
x:Class="circuit.Window2"
x:Name="Window"
Title="Конструктор построения электрической схемы"
Width="640" Height="534" WindowState="Maximized" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d">
<Window.Resources>
<StreamGeometry x:Key="провод ">M40,160L121,159</StreamGeometry>
<StreamGeometry x:Key="провод_угол">M1.5,1.5L81.5,1.5 M80.5,1.5L80.5,80.5</StreamGeometry>
<StreamGeometry x:Key="резистор">M42.5,1.5L119.5,1.5 119.5,39.5 42.5,39.5z M1.5,22.5L42.5,22.5 M120.5,21.5L161.5,21.5</StreamGeometry>
<StreamGeometry x:Key="конденсатор">M1.5,16.5L41.5,16.5 M40.5,1.5L40.5,33.5 M50.5,1.5L50.5,33.5 M55.5,16.5L95.5,16.5</StreamGeometry>
<StreamGeometry x:Key="питание">M1.5,22L41.5,22 M41,13.5L41,32.5 M49,1.5L49,41.5 M50,21.5L87,21.5</StreamGeometry>
<StreamGeometry x:Key="катушка">M36.978516,20.866699C36.976563,9.933594,43.799805,0.706543,52.934082,0.000977L52.934082,0.000977 53.008301,0.998535C44.560547,1.615234,37.97998,10.315918,37.978027,20.866699L37.978027,20.866699C37.978027,21.355957,37.992188,21.850098,38.020996,22.349121L38.020996,22.349121 37.023926,22.406738C36.990723, 21.887207,36.978516,21.374512,36.978516,20.866699L36.978516,20.866699z M68.322266,22.936035C68.330566,22.635254,68.334473,22.337402,68.334473,22.039551L68.334473,22.039551C68.334473,10.609375,61.745605,1.472168,53.601563,1.285156L53.601563,1.285156 53.628418,0.285645C62.567871,0.562988,69.333984,10.27832,69.333984,22.039551L69.333984,22.039551C69.333984,22.345215,69.330078,22.653809,69.321777,22.964355L69.321777,22.964355 69.321777,22.966309 68.322266,22.936035 68.322266,22.936035z M68.978027,20.866699C68.976074,9.933594,75.798828,0.706543,84.933594,0.000977L84.933594,0.000977 85.007324,0.998535C76.560059,1.615234,69.979492,10.315918,69.977539,20.866699L69.977539,20.866699C69.977539,21.355957,69.991699,21.850098,70.022461,22.349121L70.022461,22.349121 69.023438,22.406738C68.992188,21.887207,68.978027,21.374512,68.978027,20.866699L68.978027,20.866699z M100.32178,22.936035C100.33203,22.637207,100.33594,22.337402,100.33398,22.041504L100.33398,22.041504C100.33594,10.609375,93.74 5117,1.472168,85.603027,1.285156L85.603027,1.285156 85.62793,0.285645C94.569824,0.562988,101.33545,10.280273,101.33545,22.041504L101.33545 ,22.041504C101.33545,22.348145,101.33154,22.655762,101.32129,22.964355L101.32129,22.964355 101.32324,22.966309 100.32178,22.936035 100.32178,22.936035z M100.97754,20.866699C100.97754,9.933594,107.80029,0.706543,116.93311,0.000977L116.93311,0.000977 116.93506,0.000977 117.00879,0.998535C108.55908,1.615234,101.979,10.315918,101.97705,20.866699L101.97705,20.866699C101.979,21.355957,101.99121,21.850098,102.02197,22.349121L102.02197,22.349121 101.02246,22.406738C100.9917,21.887207,100.97754,21.374512,100.97754,20.866699L100.97754,20.866699z M132.32178,22.937012C132.33154,22.638184,132.33447,22.337402,132.33447,22.041504L132.33447,22.041504C132.33447,10.609375,125.74365,1.47168,117.60156,1.286133L117.60156,1.286133 117.62842,0.286133C126.5669,0.562012,133.33447,10.280273,133.33447,22.041504L133.33447,22.041504C133.33447,22.346191,133.32959,22.654785,133.32178,22.965332L133.32178,22.965332 132.32178,22.937012 132.32178,22.937012z M132.97607,20.867676C132.97607,9.932617,139.79834,0.7 07031,148.93311,0L148.93311,0 148.93311,0.001953 149.00732,0.998047C140.55908,1.614258,133.97803,10.316406,133.97607,20.867676L133.97607,20.867676C133.97607,21.35791,133.98877,21.850098,134.021,22.347168L134.021,22.347168 133.02393,22.409668C132.99072,21.887207,132.97803,21.374512,132.97607,20.867676L132.97607,20.867676z M164.32178,22.936035C164.33154,22.638184,164.3335,22.338379,164.3335,22.041504L164.3335,22.041504C164.3335,10.609863,157.7417,1.473145,149.60303,1.285156L149.60303,1.285156 149.62842,0.285645C158.56592,0.5625,165.3335,10.279297,165.3335,22.041504L165.3335,22.041504C165.3335,22.345215,165.32959,22.654785,165.3208,22.964355L165.3208,22.964355 165.32275,22.966309 164.32178,22.936035 164.32178,22.936035z M0,22.407715L0.012695,21.408691 37.529297,21.879395 37.51709,22.878418 0,22.407715 0,22.407715z M164.28781,21.840352L164.31684,20.842428 200.83392,21.880475 200.80391,22.878394 164.28781,21.840352 164.28781,21.840352z</StreamGeometry>
<PathGeometry x:Key="провод1" Figures="M0,6 L140,6"/>
<PathGeometry x:Key="угол_вл" Figures="M2.5,1.5 L1.5,81.5 M3.5,1.5 L82.5,1.5"/>
<PathGeometry x:Key="угол_нп" Figures="M1.5,81.5 L80.5,80.5 M81.5,1.5 L81.5,80.5"/>
<PathGeometry x:Key="угол_нл" Figures="M1.5,1.5 L1.5,81.5 M2.5,81.5 L81.5,82.5"/>
<PathGeometry x:Key="зажим" Figures="M100.5,19.5 C100.5,29.441125 91.769553,37.5 81,37.5 C70.230447,37.5 61.5,29.441125 61.5,19.5 C61.5,9.5588745 70.230447,1.5 81,1.5 C91.769553,1.5 100.5,9.5588745 100.5,19.5 z M1.5,20.5 L60.5,20.5 M101.5,20.5 L161.5,20.5"/>
<PathGeometry x:Key="зажим_исп" Figures="M100.5,22.5 C100.5,32.441125 91.769553,40.5 81,40.5 C70.230447,40.5 61.5,32.441125 61.5,22.5 C61.5,12.558875 70.230447,4.5 81,4.5 C91.769553,4.5 100.5,12.558875 100.5,22.5 z M1.5,23.5 L60.5,23.5 M101.5,23.5 L161.5,23.5 M63,41.5 L99, 1.5"/>
</Window.Resources>

<Grid x:Name="LayoutRoot">
<Canvas Margin="200,0,0,0" x:Name="inkCanvas1" Grid.IsSharedSizeScope="True" Background="#FFFEFEFE" MouseMove="Canvas_MouseMove" MouseLeftButtonUp="Canvas_MouseLeftButtonUp"/>
<Menu HorizontalAlignment="Left" x:Name="menu1" Width="194">
<Button Width="80" Height="39" Name="btn_hor" Click="CreateButton_click">
<Path Fill="#ff19161a" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="59" Height="4" Data="{DynamicResource провод}" Canvas.Left="7" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
</Button>
<Button Width="80" He ight="39" x:Name="btn_ur" Click="CreateButton_click">
<Path Fill="#FF080808 " Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="38" Height="28" Data="{DynamicResource провод_угол}" Canvas.Left="-20" Canvas.Top="-14" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
</Button>
<Button Width="80" Height="39" x:Name="btn_ul" Click="CreateButton_click">
<Path Fill="#FF080808" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="30.008" Height="26" Data="{DynamicResource провод_угол}" Canvas.Left="-16.006" Canvas.Top="-10.004" RenderTransformOrigin="0.5,0.5" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment">
<Path.RenderTransform>
<RotateTransform Angle="270.177"/> ;
</Path.RenderTransform>
</Path>
</Button>
<Button Width="80" Height="39" x:Name="btn_dr" Click="CreateButton_click">
<Path Fill="#FF080808" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="34.005" Height="26" Data="{DynamicResource провод_угол}" Canvas.Left="-17.998" Canvas.Top="-12.002" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<RotateTransform Angle="89.861"/>
</Path.RenderTransform>
</Path>
</Button>
<Button Width="80" Height="39" x:Name="btn_dl" Click="CreateButton_cli ck">
<Path Fill="#FF080808" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="38" Height="28" Data="{DynamicResource провод_угол}" Canvas.Left="-20" Canvas.Top="-14" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment" RenderTransformOrigin="0.5,0.5">
<Path.RenderTransform>
<RotateTransform Angle="-178.916"/>
</Path.RenderTransform>
</Path>
</Button>
<Button Width="80" Height="39" Name="btn_res" Click="CreateButton_click">
<Path Fill="White" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="56" Height="15" Data="{DynamicResource резистор}" Canvas.Left= "-30" Canvas.Top="-7" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
</Button>
<Button Width="80" Height="39" Name="btn_con" Click="CreateButton_click">
<Path Fill="#FF080808" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="47" Height="22" Data="{DynamicResource конденсатор}" Canvas.Left="-23" Canvas.Top="-11" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
</Button>
<Button Width="80" Height="39" Name="btn_src" Click="CreateButton_click">
<Path Fill="White" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="51.5" Height="23" Data=" {DynamicResource питание}" Canvas.Left="-27" Canvas.Top="-10" d:LayoutOverrides="HorizontalAlignment, Vertic alAlignment"/>
</Button>

<Button Width="80" Height="39" Name="btn_ind" Click="CreateButton_click">
<Path Fill="#ff19161a" Data="{DynamicResource катушка}" Stretch="Fill" Stroke="Black" StrokeThickness="2" Width="67.8" Height="12" Canvas.Left="-34" Canvas.Top="0"/>
</Button>
<Button Width="80" Height="39" x:Name="btn_o" Click="CreateButton_click">
<Path Fill="#FFF7F3F8" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="62" Height="18" Data="{DynamicResource зажим}" Canvas.Left="-32" Canvas.Top="-9" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment"/>
</Button>
<Button Width="80" Height="39" x:Name="btn_o_" Click="CreateButton_click">
<Path Fill="#FFF7F3F8" Stretch="Fill" Stroke="Black" StrokeThickness="3" Width="50" Height="17" Canvas.Left="0" Canvas.Top="-8" Data="{DynamicResource зажим_исп}" d:LayoutOverrides="HorizontalAlignment, VerticalAlignment, Width, Height" Panel.ZIndex="2" Margin="-27,0,0,0"/>
</Button>
</Menu>
</Grid>
</Window>


CODE:
Код:
using System;
using System.Collections.Generic;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using System.Windows.Ink;
using System.Collections.ObjectModel;

namespace circuit
{
/// <summary>
/// Interaction logic for Window2.xaml
/// </summary>
public partial class Window2 : Window
{
public Window2()
{
this.InitializeComponent();

}

private void CreateButton_click(object sender, RoutedEventArgs e)
{
switch ((sender as Button).Name)
{
case "btn_con": create_visual("конденсатор"); break;
case "btn_dl&quo t;: create_visual("угол_нл"); break;
case "btn_dr": create_visual("угол_нп"); break;
case "btn_hor": create_visual("провод1"); break;
case "btn_ind": create_visual("катушка"); break;
case "btn_o": create_visual("зажим"); break;
case "btn_o_": create_visual("зажим_исп"); break;
case "btn_res": create_visual("резистор"); break;
case "btn_src": create_visual("питание"); break;
case "btn_ul": create_visual("угол_вл"); break;
case "btn_ur": create_visual("провод_угол"); break;
}
}

private void create_visual(string s)
{
UserControl UC = new UserControl();
Path p = new Path();
p.Data = (Geometry)FindResource(s);
UC.Content = p;
//p.SetVal ue(Shape.FillProperty, Brushes.Black);
p.SetValue(Shape.StretchProperty, Stretch.Fill);
p.SetValue(Shape.StrokeProperty, Brushes.Black);
p.SetValue(Shape.StrokeThicknessProperty, 3.0);
UC.MouseLeftButtonDown += new MouseButtonEventHandler(UC_MouseLeftButtonDown);
inkCanvas1.Children.Add(UC);
}

#region Move Elements
UserControl CurrentControl = null;
Point RefPoint;

void Canvas_MouseMove(object sender, MouseEventArgs e)
{
if (CurrentControl != null)
{
Point p = e.GetPosition(inkCanvas1);
CurrentControl.SetValue(Canvas.LeftProperty, p.X - RefPoint.X);
CurrentControl.SetValue(Canvas.TopProperty, p.Y - RefPoint.Y);
}
}

void Canvas_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
CurrentControl = null;
}

void UC_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
CurrentControl = sender as UserControl;
RefPoint = e.GetPosition(CurrentControl);
}
#endregion
}
}

Ответ отправил: Evgenijm (10-й класс)
Ответ отправлен: 17.11.2010, 15:42
Номер ответа: 264139

Вам помог ответ? Пожалуйста, поблагодарите эксперта за это!
Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 264139 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:


  • Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2010, Портал RFPRO.RU, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2010.6.23 от 10.11.2010

    В избранное