Задать вопрос
  • Как выполнить сразу несколько действий при нажатии на кнопку?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Разобрался. Нужно в Condition обоих Publish поместить 1 (единицу).
    <!-- Чтобы выполнились сразу 2 действия, нужно в качестве Condition указать 1 у обоих действий -->
     <Publish Dialog="SettingsDlg" Control="Next" Event="DoAction" Value="DoMethodAction2" Order="1" >1</Publish>
    <Publish Dialog="SettingsDlg" Control="Next" Event="NewDialog" Value="SettingsPreviewDlg" Order="2">1</Publish>
    Ответ написан
    Комментировать
  • Стоит ли записываться на курсы от geekbrains? Или стоит получить второе высшее образование?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Что-то тут никто не упомянул в спорах про вуз и курсы, что если у тебя есть 6 лет опыта, то за границей это равняется тому, что у тебя высшее образование. Точнее, тебя без проблем возьмут на работу. И есть у меня знакомый, который уехал в США работать С++ программистом, бросил универ и уехал. Правда через какое-то время он там будет поступать.
    Ответ написан
    Комментировать
  • Не удаётся получить доступ к asp:TextBox из кода. Как получить оттуда значение?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Решил проблему так:

    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true" CodeBehind="Index.aspx.cs" Inherits="WebAppSendMessage.Views.Index" %>
    
    <asp:Content ID="header" ContentPlaceHolderID="head" runat="server">
        <style>
            input[type=text] {
                margin-top: 5px;
                margin-left: 3px;
                margin-right: 3px;
                width: 100%;
            }
    
            input[type=submit] {
                margin-top: 5px;
                margin-left: 3px;
                margin-right: 3px;
            }
        </style>
    </asp:Content>
    
    <asp:Content ID="mainContent" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
        <form id="mainForm" method="post" runat="server">
            <asp:TextBox ID="textBox" runat="server" />
            <br />
            <asp:Button ID="sendMessageButton" runat="server" Text="Отправить сообщение"  OnClick="SendMessageButton_OnClick"/>
        </form>
    </asp:Content>


    using System;
    using System.Web;
    using System.Web.UI;
    
    namespace WebAppSendMessage.Views
    {
        public partial class Index : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                HttpCookie cookie = Request.Cookies["mainMessage"];
                
                if (cookie != null)
                {
                    string message = cookie["Message"];
                    if (message != null)
                    {
                        textBox.Text = message;
                    }
                }
            }
    
            protected void SendMessageButton_OnClick(object sender, EventArgs e)
            {
                HttpCookie cookie = Request.Cookies["mainMessage"];
                if (cookie == null)
                {
                    cookie = new HttpCookie("mainMessage");
                    cookie.Expires = DateTime.Now.AddYears(1);
                }
    
                string message = Request.Form[textBox.UniqueID];
                cookie["Message"] = message;
                Session["Message"] = message;
                Session["BackAddress"] = Request.RawUrl;
    
                Response.Charset = "utf-8";
                Response.Cookies.Add(cookie);
    
                Response.Redirect("Message.aspx");
            }
        }
    }


    <%@ Page Title="" Language="C#" MasterPageFile="~/MasterPage.Master" AutoEventWireup="true"
        CodeBehind="Message.aspx.cs" Inherits="WebAppSendMessage.Views.Message" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="MainContentPlaceHolder" runat="server">
        <form id="mainForm" runat="server">
            <asp:Label runat="server" Text="<%# Text %>"></asp:Label>
            <br />
            <asp:Button ID="backButton" runat="server" Text="Вернуться" OnClick="GoToBackButton_OnClick" />
        </form>
    </asp:Content>


    using System;
    using System.Web;
    using System.Web.UI;
    
    namespace WebAppSendMessage.Views
    {
        public partial class Message : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    DataBind();
                }
            }
    
            protected string Text
            {
                get { return (string)Session["Message"]; }
            }
    
            protected void GoToBackButton_OnClick(object sender, EventArgs e)
            {
                string returnUrl = Session["BackAddress"] as string ?? "Index.aspx";
                Response.Redirect(returnUrl);
            }
        }
    }
    Ответ написан
    Комментировать
  • Привык работать с чистым кодом, а заказчику надо CMS. С чего начать?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    professorweb.ru/my/ASP_NET/gamestore/level1
    Но нужно знать C#. За то там всё расписано по шагам с админкой, насколько я помню. Ещё там bootstrap юзается. Если знаешь C#, то советовал бы из двух вариантов выбрать не ASP.NET WebForms, а ASP.NET MVC.
    Ответ написан
    Комментировать
  • Уничтожить объект в foreach?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Никак, если эта копия никак не ссылается на исходный объект и если ты не инкрементируешь какую-то переменную типа int, чтобы с её помощью обратиться к исходному массиву по этому индексу и удалить там объект тоже. Но тогда зачем использовать foreach.

    Вот о чём я.
    public class Person
        {
            public string Name { get; set; }
    
            public int Age { get; set; }
        }


    class Program
        {
            static void Main(string[] args)
            {
                var source = new Person[]
                    {
                        new Person { Age = 20, Name = "Сергей" },
                        new Person { Age = 32, Name = "Дмитрий" },
                        new Person { Age = 18, Name = "Андрей" }
                    };
    
                var copy = new Person[source.Length];
                Array.Copy(source, copy, source.Length);
    
                DisplayPersons(copy);
                Console.WriteLine();
    
                int index = 0;
                foreach (Person person in copy)
                {
                    Console.WriteLine(person.Name + " удалён из исходного массива");
                    source[index++] = null;
                }
    
                if (source.Any(p => p != null))
                {
                    Console.WriteLine("Не удалось удалить все элементы исходного массива.");
                }
    
                Console.ReadKey();
            }
    
            static void DisplayPersons(IEnumerable<Person> persons)
            {
                foreach (Person person in persons)
                {
                    Console.WriteLine("Имя: {0}, возраст: {1}", person.Name, person.Age);
                }
            }
        }
    Ответ написан
    Комментировать
  • При работе с mysql.exe, как настроить так, чтобы выходной файл бэкапа был в кодировке UTF-8?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Да я уж понял, просто код не я писал, который его делает, я увидел позже, что этим занимается mysqldump.

    Добавил я этот ключ, ничего не изменилось, оказывается по умолчанию и так в UTF 8 без BOM сохранялось. Просто, когда я открываю в dbForge Studio for MySQL, то вижу это:
    b63334cfc306.jpg
    Ответ написан
  • Как убрать фриз программы c# WPF?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Ты для авторизации создаёшь целый поток. Почему тормоза тебе уже сказали, ты вызываешь authVK.join() в основном потоке и тем самым его сам же стопоришь, пока не выполнится второй поток. Вообще благодаря этому коду ты тратишь больше ресурсов и вызываешь ещё большие тормоза, если бы вообще не юзал поток.

    В данном случае использовать нужно Task. Или ещё уйму способов выполнить код не в основном потоке и не создавать новый. Почитай про пул потоков и задачи (Task).

    Я смотрю ты создал константу Empty с пустой строкой!? Так есть же string.Empty стандартный.

    <Window x:Class="Wpf_Task.MainWindow"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            Title="MainWindow"
            Width="525"
            Height="350"
            WindowStartupLocation="CenterScreen">
       <Window.Resources>
          <Storyboard x:Key="OnLoaded1"
                      RepeatBehavior="Forever">
             <DoubleAnimationUsingKeyFrames Storyboard.TargetName="border"
                                            Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
                <EasingDoubleKeyFrame KeyTime="0"
                                      Value="0" />
                <EasingDoubleKeyFrame KeyTime="0:0:1"
                                      Value="360" />
             </DoubleAnimationUsingKeyFrames>
          </Storyboard>
       </Window.Resources>
    
       <Window.Triggers>
          <EventTrigger RoutedEvent="FrameworkElement.Loaded">
             <BeginStoryboard Storyboard="{StaticResource OnLoaded1}" />
          </EventTrigger>
       </Window.Triggers>
    
       <Grid>
    
          <Button x:Name="executeButton"
                  Width="75"
                  Margin="0,216,0,0"
                  HorizontalAlignment="Center"
                  VerticalAlignment="Top"
                  Click="Button_Click"
                  Content="Выполнить"
                  TextOptions.TextFormattingMode="Display" />
    
          <Rectangle x:Name="border"
                     Width="100"
                     Height="100"
                     Margin="208,57,208,161"
                     HorizontalAlignment="Center"
                     VerticalAlignment="Center"
                     RenderTransformOrigin="0.5,0.5">
             <Rectangle.Fill>
                <LinearGradientBrush StartPoint="0.5,0" EndPoint="0.5,1">
                   <GradientStop Offset="0" Color="#FFD1BD69" />
                   <GradientStop Offset="1" Color="#FFFFF5C9" />
                </LinearGradientBrush>
             </Rectangle.Fill>
             <Rectangle.RenderTransform>
                <TransformGroup>
                   <ScaleTransform />
                   <SkewTransform />
                   <RotateTransform />
                   <TranslateTransform />
                </TransformGroup>
             </Rectangle.RenderTransform>
          </Rectangle>
    
          <TextBlock x:Name="_result"
                     Margin="0,187,0,0"
                     HorizontalAlignment="Center"
                     VerticalAlignment="Top"
                     Text="..."
                     TextOptions.TextFormattingMode="Display"
                     TextWrapping="Wrap" />
    
       </Grid>
    </Window>


    using System.Threading;
    using System.Threading.Tasks;
    using System.Windows;
    
    namespace Wpf_Task
    {
        public partial class MainWindow : Window
        {
            public MainWindow()
            {
                InitializeComponent();
            }
    
            private void Button_Click(object sender, RoutedEventArgs e)
            {
                executeButton.IsEnabled = false;
                Task<int>.Factory.StartNew(() =>
                {
                   return Auth.Login();
                })
                .ContinueWith(task => //Выполнить код в основном потоке (TaskScheduler.FromCurrentSynchronizationContext())
                {
                    executeButton.IsEnabled = true;
                    _result.Text = task.Result.ToString();
                }, TaskScheduler.FromCurrentSynchronizationContext());
            }
        }
    
        public static class Auth
        {
            private static int _counter;
    
            public static int Login()
            {
                Thread.Sleep(1000);
                return ++_counter;
            }
        }
    }
    Ответ написан
    3 комментария
  • Просто убийственно тормозит XAML дизайнер после добавления Autofac. Кто-нибудь с такой проблемой сталкивался?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Обновлено: 10.07.2015
    В общем решил проблему так. В конструкторе ViewModelLocator почти ничего не выполняю в режиме дизайнера кода, а свойство сделал таким:
    public MainViewModel Main
            {
                get
                {
                    return !ViewModelBase.IsInDesignModeStatic ?
                        _container.Resolve<MainViewModel>() :
                        _designerMainVm ?? (_designerMainVm = 
                        new MainViewModel(null, null, null, null) { Settings = new AppSettings() });
                }
            }

    Конец обновленного текста

    ViewModelLocator.cs
    public class ViewModelLocator : ViewModelLocatorBase
        {
            private readonly IContainer _container;
            private static ViewModelLocator _locator;
    
            public ViewModelLocator()
            {
                _locator = this;
    
                if (!ViewModelBase.IsInDesignModeStatic)
                {
                    Application.Current.DispatcherUnhandledException += Current_DispatcherUnhandledException;
                    Application.Current.MainWindow.Loaded += MainWindow_Loaded;
                    Application.Current.MainWindow.Closing += MainWindow_Closing;
                }
    
                LogManager.Logger.LogPath = LocalConfiguration.Instance.Folders.Logs;
    
                DispatcherHelper.Initialize();
                CorrelationsLocator.Initialize();
    
                if (!ViewModelBase.IsInDesignModeStatic)
                {
                    ProgramIdentification.Initialize(ProgramIdentifier.CbpOperator);
    
                    LocalConfiguration.Instance.Folders.CheckFolders();
                    LocalConfiguration.Instance.LoadAppConfig();
                    LocalConfiguration.Instance.LoadLocalSettings();
    
                    WpfSingleInstance.AppIsAlreadyRunning += (sender, args) =>
                        MessageBox.Show(string.Format("Приложение: {0} уже запущено", args.AppName));
                    WpfSingleInstance.Make();
                }
                _container = RegisterDependencies(LocalConfiguration.Instance);
            }
    
            private IContainer RegisterDependencies(LocalConfiguration config)
            {
                var builder = new ContainerBuilder();
    
                builder.RegisterType<LauncherViewModel>().SingleInstance();
                builder.RegisterType<ShutdownViewModel>().SingleInstance();
                builder.RegisterType<CommandManager>().SingleInstance();
                builder.RegisterType<AccountControllerVm>().SingleInstance();
                builder.RegisterType<ComponentEditorViewModel>().SingleInstance();
                builder.RegisterType<ComponentSelectorViewModel>().SingleInstance();
                builder.RegisterType<RecipeTimeSetEditorViewModel>().SingleInstance();
                builder.RegisterType<CategoryEditorViewModel>().SingleInstance();
                builder.RegisterType<AboutDialogViewModel>().SingleInstance();
                builder.RegisterType<L1ApplicationManagerViewModel>().SingleInstance();
    
                builder.RegisterType<CarEditorViewModel>() //Редактор машин
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.CarsWindowSettings; //Настройки окна (положение, размер, состояние)
                    }).SingleInstance();
    
                builder.RegisterType<ClientsEditorViewModel>() //Редактор клиентов
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.ClientsWindowSettings; //Настройки окна (положение, размер, состояние)
                    }).SingleInstance();
    
                builder.RegisterType<ReportsWindowViewModel>() //Отчёты
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.ReportsWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.ReportsFolder = config.Folders.Documents;
                        e.Instance.ReportMode = ReportMode.Applications;
                    });
    
                builder.RegisterType<EventLogViewModel>() //Журнал событий
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.EventLogWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.SetConfiguration(config.Config, config.Folders.EventReportFolder);
                    });
    
                builder.RegisterType<RecipesEditorViewModel>() //Редактор рецептов
                    .OnActivated(e =>
                    {
                        e.Instance.WindowSettings = config.Settings.RecipeWindowSettings; //Настройки окна (положение, размер, состояние)
                        e.Instance.SetEditorSettings(config.Settings.RecipeEditorConfig);
                    })
                    .SingleInstance();
    
                builder.RegisterType<ApplicationsEditorViewModel>() //Редактор заявок
                    .OnActivated(e =>
                    {
                        e.Instance.LastSelectedItems = config.Settings.LastSelectedItemsInAppWindow; //Состояние последних выбранных элементов.
                        e.Instance.WindowSettings = config.Settings.AppEditorWindowSettings;
                    })
                    .SingleInstance();
    
                builder.RegisterType<MainViewModel>() 
                    .OnActivated(e =>
                    {
                        var appManager = e.Context.Resolve<L1ApplicationManagerViewModel>();
                        appManager.Main = e.Instance;
                        if (!ViewModelBase.IsInDesignModeStatic)
                        {
                            e.Instance.Title = ProgramIdentification.GetCurrentProgramName();
                        }
                        e.Instance.Settings = config.Settings.ApplicationSettings;
                    })
                    .SingleInstance();
    
                return builder.Build();
            }
    
            private void MainWindow_Loaded(object sender, RoutedEventArgs e)
            {
                WindowManager.Instance.Initialize(Application.Current.MainWindow, Main);
                Main.OnWindowLoaded();
            }
    
            private void MainWindow_Closing(object sender, CancelEventArgs e)
            {
                Debug.WriteLine("Начало: MainWindow_Closing");
                Window window = (Window)sender;
    
                Debug.WriteLine("Конец: MainWindow_Closing");
    
                if (WindowManager.Instance.OpenMessageDialog(DialogIcons.Help, DialogButtons.YesNo,
                    "Выход из программы",
                    "Вы действительно хотите завершить работу приложения?") == UserDialogResult.No)
                    e.Cancel = true;
                else
                {
                    window.Closing -= MainWindow_Closing;
                    try
                    {
                        LocalConfiguration.Instance.SaveLocalSettings();
                        LocalConfiguration.Instance.SaveCurrentAppConfig();
                    }
                    catch (Exception ex)
                    {
                        LogManager.Logger.AppendException(ex);
                    }
                }
            }
    
            private void Current_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
            {
                LogManager.Logger.AppendException(e.Exception);
                MessageBox.Show(e.Exception.ToString());
            }
    
            #region Свойства
    
            public static ViewModelLocator Current
            {
                get { return _locator; }
            }
    
            public MainViewModel Main
            {
                get { return _container.Resolve<MainViewModel>(); }
            }
    
            public L1ApplicationManagerViewModel ApplicationsManager
            {
                get { return _container.Resolve<L1ApplicationManagerViewModel>(); }
            }
    
            public AccountControllerVm AccountController
            {
                get { return _container.Resolve<AccountControllerVm>(); }
            }
    
            public ShutdownViewModel Shutdown
            {
                get { return _container.Resolve<ShutdownViewModel>(); }
            }
    
            public CategoryEditorViewModel CategoryEditor
            {
                get { return _container.Resolve<CategoryEditorViewModel>(); }
            }
    
            public ApplicationsEditorViewModel ApplicationsEditor
            {
                get { return _container.Resolve<ApplicationsEditorViewModel>(); }
            }
    
            public RecipesEditorViewModel RecipesEditor
            {
                get { return _container.Resolve<RecipesEditorViewModel>(); }
            }
    
            public ComponentEditorViewModel ComponentEditor
            {
                get { return _container.Resolve<ComponentEditorViewModel>(); }
            }
    
            public ComponentSelectorViewModel ComponentsSelector
            {
                get { return _container.Resolve<ComponentSelectorViewModel>(); }
            }
    
            /// <summary>Редактор клиентов</summary>
            public ClientsEditorViewModel ClientsEditor
            {
                get { return _container.Resolve<ClientsEditorViewModel>(); }
            }
    
            public CarEditorViewModel CarsEditor
            {
                get { return _container.Resolve<CarEditorViewModel>(); }
            }
    
            public CommandManager CommonCommands
            {
                get { return _container.Resolve<CommandManager>(); }
            }
    
            public LauncherViewModel Launcher
            {
                get { return _container.Resolve<LauncherViewModel>(); }
            }
    
            public AboutDialogViewModel About
            {
                get { return _container.Resolve<AboutDialogViewModel>(); }
            }
    
            /// <summary>
            /// Возвращает новый экземпляр модели представления Отчётов
            /// </summary>
            public ReportsWindowViewModel NewReport
            {
                get { return _container.Resolve<ReportsWindowViewModel>(); }
            }
    
            /// <summary>
            /// Возвращает новый экземпляр модели представления Журнала событий
            /// </summary>
            public EventLogViewModel NewEventLog
            {
                get { return _container.Resolve<EventLogViewModel>(); }
            }
    
    
            #endregion
    
            #region Методы
    
    
            #endregion
        }
    Ответ написан
  • Как запретить остановку программы?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Обычно, когда рассказывают, что что-то не работает, прикладывают код. Сидел и думал, а причём тут WPF.
    Ответ написан
  • Как правильно написать на MVVM?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Если актуалити, то могу показать пример с библиотекой MvvmLight.
    Ответ написан
  • Современные технологии для разработки десктоп-приложений в Windows?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    WPF умирает? Аза-за-за! Не смеши.
    Ответ написан
    Комментировать
  • Как отловить момент, когда окно помещается в одну из сторон экрана (прилипает как бы), при нажатии WIN + LEFT?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Вот решение проблемы с максимизацией окна
    blogs.msdn.com/b/llobo/archive/2006/08/01/maximizi...

    Но в конкретно этом примере есть проблема, там сбрасывается минимальный размер окна. Его тоже нужно задавать.
    Ответ написан
    Комментировать
  • Как удалить определенный Image с Canvas?

    Casper-SC
    @Casper-SC
    Программист (.NET)
    Ну вот, к примеру:
    private void DoWork()
    {
        Canvas CnMapField = new Canvas();
    
        Image[] images = CopyFrom<Image>(CnMapField.Children);
        foreach (Image img in images)
        {
            if (img.Margin.Left == x)
                CnMapField.Children.Remove(img);
        }
    }
    
    private T[] CopyFrom<T>(UIElementCollection collection) where T : UIElement
    {
        var images = new List<T>(collection.Count);
        images.AddRange(collection.Cast<T>());
        return images.ToArray();
    }


    То есть ты foreach(ем) бегаешь по копии коллекции, а удаляешь из оригинала.

    Хотя в данном случае приведение к Image не обязательно.
    Ответ написан
    Комментировать
  • Как получить из таблицы записи по коллекции ключей?

    Casper-SC
    @Casper-SC Автор вопроса
    Программист (.NET)
    Сам разобрался. Решил так:
    public DbPicture[] GetImages(string[] keys)
            {
                return _context.Pictures.Where(p => keys.Any(k => k == p.FileName)).ToArray();
            }
    Ответ написан
    Комментировать