Ответы пользователя по тегу Visual Studio
  • Где можна подучить дизайн в Windows Form?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    FlowLayoutPanel и TableLayoutPanel - вот и весь дизайн :-)

    5b3601df55816684367353.png
    Ответ написан
    Комментировать
  • Скроллинг в оконном приложении C#?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Свойство AutoScroll = true у контейнера, в котором находятся элементы.
    Ответ написан
  • Как в MS Visual Studio сделать фрагмент кода (html) inline?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    В самой студии такого не припомню.

    Можно макрос написать, но лучше расширение поискать.

    Например, в CodeMaid есть функция Joining для склейки нескольких строк в одну.

    Или JoinLines - более легкий вариант.

    По горячим клавишам, если будут проблемы или просто захочется их переопределить, то сделать это можно в настройках Visual Studio: меню Сервис => Параметры => Окружение => Клавиатура.

    50ca11b86dad4ea7a2a7a096072e27bd.png
    Ответ написан
    Комментировать
  • Как выделить строку таблицы при нажатии пр. клавиши мыши?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Добавить обработчик MouseDown:

    <DataGrid x:Name="dataGrid" MouseDown="dataGrid_MouseDown"/>

    Код обработчика примерно такой:

    private void dataGrid_MouseDown(object sender, MouseButtonEventArgs e)
    {
      if (e.RightButton == MouseButtonState.Pressed)
      {
        var row = DataGridRow.GetRowContainingElement(e.OriginalSource as FrameworkElement);
        if (row != null)
        {
          // dataGrid.SelectedIndex = row.GetIndex();
          dataGrid.SelectedItem = row;
        }
      }
    }
    Ответ написан
    Комментировать
  • Зачем Visual Studio 2015 community просит авторизацию?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Таковы условия использования.

    После авторизации можно будет продолжить использование. Достаточно будет указать email. Это бесплатно.

    Регистрация позволит выполнять синхронизацию между устройствами.

    Через Visual Studio Team Services можно участвовать в разработке совместных проектов. В том числе есть возможность работать с кодом в браузере на сайте www.visualstudio.com. Все готовое, так сказать, из коробки.
    Ответ написан
    Комментировать
  • Как добавить web проект в VS?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    добавляются только файлы корневого каталога

    Не совсем понял, о чем речь. Возможно, в Visual Studio 2015, если делать вставку из проводника, файлы могут не включаться в решение, будут добавлены только каталоги. Их придется включать вручную. Для этого нужно включить показ всех файлов:

    89d8e00e769e41808eab50484b01860e.png
    И затем выбрать недостающие файлы и папки и включить их в проект через контекстное меню:

    110986bb5b81446e980dce674c107b4f.png

    В Visual Studio для PHP я использую PHP Tools for VS.

    С TypeScript в рамках Visual Studio проект PHP дружить так и не захотел.

    Самое простое решение - сделать отдельный проект для TypeScript (в рамках одного решения).

    В bundleconfig.json (BundlerMinifier) можно прописать вывод собранных файлов в любую папку, в том числе в папку с проектом PHP.

    Вот тут можно посмотреть пример, как это может быть.

    460884d980314ab4902ecdd101ad5888.png
    Структура решения:
    /Решение
    -- FrontEndScripts - проект TypeScript
    -- SmallServerAdmin - проект PHP, в который, помимо прочего, собираться клиентский код

    bundleconfig.json
    [
      {
        "includeInProject": false,
        // вывод js делаем в проект SmallServerAdmin
        "outputFileName": "../SmallServerAdmin/Content/compiled.js",
        "inputFiles": [
          // файлы, которые должны входить итоговую в сборку
          "libs/jquery-1.11.2.js",
          "libs/jquery-ui.min.js",
          "libs/jquery.json.min.js",
          "libs/jquery.caret.min.js"
          // ...
        ]
      }
    ]


    TypeScript компилируется в JavaScript в тоже место, где находятся файлы TypeScript. Каждый файл прописывается в bundleconfig.json. Затем все это собирается в итоговый файл /SmallServerAdmin/Content/compiled.js.

    Плохое, но простое решение.

    Еще можно попробовать в настройках проекта TypeScript (Проект -> Свойства проекта) указать параметры сборки и папку вывода (путь может быть относительным).

    ae17a55c4ba748fb9eb97d8974479ee9.png
    Если оставаться в рамках одного проекта, то можно попробовать сделать файл конфигурации TypeScript в корне проекта: tsconfig.json. Возможно он будет использован, но в проектах отличных от TypeScript я этого не проверял и не могу точно сказать, как это будет работать.

    {
      "compilerOptions": {
        "outDir": "./куда делать вывод компилированных файлов",
        "sourceMap": false,
        "noImplicitAny": true,
        "module": "CommonJS",
        "target": "es5"
      },
      "files": [
        // файлы проекта
        "./init.ts"
      ]
    }


    С WebPack можно сделать больше, но это будет существенно сложнее. Пример решения (TypeScript + PHP) можно тут посмотреть.

    Для WebPack потребуется:

    • Node.js
    • Webpack Task Runner
    • NPM Scripts Task Runner

    Управление сборкой TypeScript можно оставить студии, это проще всего. А все остальное прописывается в webpack.config.js. Но все может быть очень сложно, на получение оптимальной конфигурации можно угрохать пару десятков часов :-)
    Ответ написан
    2 комментария
  • Как восстановить в окне конструктора случайно удаленный контрол в winforms?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    С Windows Forms нужно быть готовым к разного рода фокусам со стороны Visual Studio.
    Даже при использовании систем контроля версий, порой приходится повозиться с подлянками в виде пропавших картинок или дочерних элементов в каком-нибудь меню или ToolStrip. Многие подобные случаи можно поправить руками, путем ручного исправления файлов Designer, но не всегда. Чем сложнее форма, тем выше риск того, что дизайнер студии что-нибудь сломает; всегда нужно быть к этому готовым.

    1. Раз появился такой вопрос, то видимо Ctrl + Z точно уже не поможет. Это первое, что нужно было сделать.

    2. Если форма не была сохранения, то для отката изменений можно было бы её просто закрыть без сохранения. Но опять же, это нужно было делать сразу, при возникновении проблемы и если обычный откат назад (Ctrl + Z) не помог.

    3. Если не используется система контроля версий, то нужно регулярно делать резервные копии исходного кода. Использование системам контроля версий будет удобней. Но даже при использовании систем контроля версий, следует регулярно делать резервные копии, и резервные копии резервных копий.

    4. Если есть сборка нужного состояния программы (или приблизительно этому состоянию) и над пропавшим интерфейсом велась работа в поте лица, без перерывов на обед и сон, и все очень сложно и не хочется повторять этот героический поступок, то можно декомпилирвать предыдущую сборку и выдернуть код описания интерфейса из нее. Например, при помощи dotPeek.

    Описание элементов формы, по умолчанию, находятся в файлах Designer. Например, элементы Form1 можно найти в файле Form1.Designer.cs. Иногда у элементов могут просто потеряться ссылки на родителей. Случай случайного удаления элемента и отката назад (Ctrl + Z) как раз-таки может привести к подобному поведению. Код в файле Designer обычно остается и ссылки можно поправить руками. Как правило, речь идет о добавлении строчек кода вида: this.родительскийЭлемент.Controls.Add(this.дочернийЭлемент). Главное понимать, что от чего отвалилось и что к чему нужно привязать. Если не понимать, то можно сделать хуже :-) (не стоит забывать про создание резервных копий). После внесения изменений в код дизайнера, следует переоткрыть конструктор форм (в идеале, перед внесением изменений в *.Designer.cs, конструктор форм (визуальный редактор форм) лучше закрыть).

    Если элемент удален полностью и использовать восстановление из предыдущей сборки, то в декомпилированном коде нужно будет найти класс формы, а в нем метод InitializeComponent. У DataGridView, каждая колонка и строка (при наличии) будут являться отдельными элементами, нужно найти и перенести весь код описания этих элементов. Как правило, для каждого отдельного элемента, установка значений свойствам в коде идет последовательно. Дочерние элементы могут идти в разброс, по именам элементов можно более ли менее понять, что к чему (если стандартные имена у элементов менялись на собственные, то проблем с поиском возникнуть не должно).
    Ответ написан
    Комментировать
  • Приложение не запускается на WinXP, как можно исправить?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    На Windows XP должен быть установлен .NET Framework. В данном случае, версия 2.0. Также может потребоваться Service Pack 3.

    Лучше ниже .NET Framework 3.5 не использовать.
    И .NET Framework 4.0 под Windows XP вполне нормально работает, если установить. Версия 4.5 уже не поддерживается

    .NET 2.0, если не изменяет память, по умолчанию не входил в состав Windows XP (если хотелось именно этого).
    Ответ написан
    2 комментария
  • Как сделать так, чтобы после нажатия кнопки можно было щелкнуть мышкой в PictureBox и там бы нарисовался круг?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Фигуры фиксированного размера можно нарисовать так:
    public partial class Form1 : Form
    {
    
        private int BrushType = 1;
    
        public Form1()
        {
          InitializeComponent();
    
          // создаем PictureBox
          var pic = new PictureBox { Dock = DockStyle.Fill, BackColor = Color.White };
          pic.MouseClick += PictureBox_MouseClick;
          this.Controls.Add(pic);
    
          // создаем панель для кнопок
          var panel = new FlowLayoutPanel { Dock = DockStyle.Top, AutoSize = true };
          this.Controls.Add(panel);
    
          // кнопки
          var btn = new RadioButton 
          { 
            Text = "Круг", 
            Tag = 1, 
            Appearance = Appearance.Button, 
            Checked = true, 
            AutoSize = true 
          };
          btn.Click += Button_Click;
          panel.Controls.Add(btn);
    
          btn = new RadioButton
          {
            Text = "Не круг",
            Tag = 2,
            Appearance = Appearance.Button,
            AutoSize = true
          };
          btn.Click += Button_Click;
          panel.Controls.Add(btn);
    
          btn = new RadioButton
          {
            Text = "Квадратный круг",
            Tag = 3,
            Appearance = Appearance.Button,
            AutoSize = true
          };
          btn.Click += Button_Click;
          panel.Controls.Add(btn);
        }
    
        private void Button_Click(object sender, EventArgs e)
        {
          var btn = (RadioButton)sender;
          this.BrushType = (int)btn.Tag;
        }
    
        private void PictureBox_MouseClick(object sender, MouseEventArgs e)
        {
          // получаем ссылку на PictureBox
          var pic = (PictureBox)sender;
          // получаем Graphics из PictureBox
          var g = pic.CreateGraphics();
    
          if (this.BrushType == 2)
          {
            // рисуем не круглый квадрат
            g.DrawRectangle(Pens.Black, e.X, e.Y, 50, 50);
          }
          else if (this.BrushType == 3)
          {
            // рисуем квадратный круг
            Point[] points = new Point[6];
            int half = 50 / 2;
            int quart = 50 / 4;
            points[0] = new Point(e.X + quart, e.Y);
            points[1] = new Point(e.X + 50 - quart, e.Y);
            points[2] = new Point(e.X + 50, e.Y + half);
            points[3] = new Point(e.X + 50 - quart, e.Y + 50);
            points[4] = new Point(e.X + quart, e.Y + 50);
            points[5] = new Point(e.X, e.Y + half);
            g.DrawPolygon(Pens.Black, points);
          }
          else
          {
            // рисуем эллипс
            g.DrawEllipse(Pens.Black, e.X, e.Y, 50, 50);
          }
        }
    
    }

    В качестве кнопок используются RadioButton, т.к. это удобней.
    Чтобы не стиралось, можно сделать Bitmap:
    var pic = (PictureBox)sender;
    if (pic.Image == null) { pic.Image = new Bitmap(pic.Width, pic.Height); }
    var bmp = new Bitmap(pic.Image);
    var g = Graphics.FromImage(bmp);

    И после завершения рисования, передать картинку в PictureBox:
    pic.Image = bmp;

    Результат:
    c141d6f9ebe44712a5d9c5f9aa67dcb1.png
    Ответ написан
    1 комментарий
  • Как подключить к веб-приложению (ASP.NET MVC 4) БД MySql?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Необходимо скачать и установить Connector/Net.

    Работать также как и с любыми другими базами в .NET.

    Основные классы:
    • MySqlConnection - для подключения к базе;
    • MySqlCommand и MySqlDataAdapter - формирование запросов и получение данных.

    Подробности можно найти в документации.
    Ответ написан
    Комментировать
  • Visual Basic метод или операция не осуществляется?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Код вижу, вопрос непонятен. Нужно больше букв, желательно в виде слов, образующих предложения, наполненных смыслом :)

    По коду, вот здесь:

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        OpenFileDialog1.ShowDialog()
        TextBox1.Text = OpenFileDialog1.FileName
    End Sub


    Нет обработчика результата работы диалогового окна. Должно быть что-то типа:

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        ' если пользователь не захотел выбирать файл, выходим
        If Not OpenFileDialog1.ShowDialog() = System.Windows.Forms.DialogResult.OK Then Return 
        ' пользователь выбрал файл
        TextBox1.Text = OpenFileDialog1.FileName
    End Sub


    Вот в этой строчке:

    If TextBox1 = Acct_NoTextbox.Text Then

    Лучше явно указать свойство Text при проверке значения элемента TextBox1:

    If TextBox1.Text = Acct_NoTextbox.Text Then

    Хотя, если сделать нормальную работу OpenFileDialog, как я показал выше, то в этом условии необходимость вообще должна отпасть. Ну или можно просто проверять наличие значения в TextBox1:

    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
          Try
                ' если значение TextBox1.Text - пустая строка или Nothing, то
                If String.IsNullOrEmpty(TextBox1.Text) Then 
                    MessageBox.Show("Select file for get size!")
                    Return ' выходим
                End If
    
                'можно сразу создать FileInfo и проверять существование файла через него
                Dim file As New System.IO.FileInfo(TextBox1.Text)
                If file.Exists Then
                    MessageBox.Show(file.Length & "Bytes")
                Else
                    MessageBox.Show("Thise file is not existes on your PC")
                End If
          Catch ex As Exception
                MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
          End Try
    End Sub
    Ответ написан
    Комментировать
  • Использование switch вместе с RadioButton(и некорректная работа switch)?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Если переменная n имеет тип int, то вероятно следует проверять числа:
    switch (n)
    {
      case 1: 
        F = f(x);
        I = Integr(a, b, n);
        break;
      case 2:
        I=155;
        break;
    }
    Ответ написан
  • Как импортировать sql таблицу в SQL Server в Visual Studio 2013?

    AlekseyNemiro
    @AlekseyNemiro
    full-stack developer
    Создать множество файлов маленького размера и импортировать bat-ником:
    @echo off
    for /r C:\путь к папке с файлами .sql %%g in (*) do SQLCMD.EXE -d [в какой базе выполнить запросы] -i "%%~nxg" -o "%%~nxg.log"


    Или, если база создана в Visual Studio, то проще всего будет просто подключить ее к SQL Server Management Studio.

    20b6d487800e44eba3a4bd22de67c34d.png
    Ответ написан
    Комментировать