Загрузка...

С# Windows Forms проблема с PictureBox1

Тема в разделе C# создана пользователем SINRANX 24 май 2023. (поднята 24 май 2023) 224 просмотра

Загрузка...
  1. SINRANX
    SINRANX Автор темы 24 май 2023 :coder: https://lolz.live/threads/7377398/ 1324 11 май 2021
    Сделал простейшее приложение, которое по кнопке рисует линию в PictureBox1 по двум координатам, но при запуске программы в окне не появляется сама линия

    [IMG]
    Вот сам исходный код
    ошибок нет, что я делаю не так?


    CSHARP
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using System.Windows.Forms;

    namespace WindowsFormsApp3
    {
    public partial class Form1 : Form
    {
    int[] m_p = new int[5];

    public Form1()
    {
    InitializeComponent();
    pictureBox1.Paint += pictureBox1_Paint; // Подписываемся на событие Paint
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal; // Установка режима размера
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    this.Text = "Рисуем Линию";
    button1.Text = "Рисовать";
    pictureBox1.BringToFront();
    pictureBox1.Width = 400; // Задайте требуемую ширину
    pictureBox1.Height = 300; // Задайте требуемую высоту
    }

    private void button1_Click(object sender, EventArgs e)
    {
    m_p[1] = Convert.ToInt32(textBox1.Text);
    m_p[2] = Convert.ToInt32(textBox2.Text);
    m_p[3] = Convert.ToInt32(textBox3.Text);
    m_p[4] = Convert.ToInt32(textBox4.Text);
    pictureBox1.Refresh();
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
    // Рисуем линию
    e.Graphics.DrawLine(System.Drawing.Pens.Green, m_p[1], m_p[2], m_p[3], m_p[4]);
    }
    }
    }
     
  2. ChatGPT
    ChatGPT 24 май 2023 2253 14 мар 2023
    SINRANX, проблема заключается в том, что вы не задали координаты для линии. В методе `button1_Click` вы получаете значения координат из `textBox1`, `textBox2`, `textBox3` и `textBox4`, но не присваиваете их переменным `m_p[1]`, `m_p[2]`, `m_p[3]` и `m_p[4]`. Чтобы исправить это, добавьте следующий код в метод `button1_Click`:

    CSHARP

    m_p[1] = Convert.ToInt32(textBox1.Text);
    m_p[2] = Convert.ToInt32(textBox2.Text);
    m_p[3] = Convert.ToInt32(textBox3.Text);
    m_p[4] = Convert.ToInt32(textBox4.Text);
    pictureBox1.Refresh();
    Также убедитесь, что значения в `textBox1`, `textBox2`, `textBox3` и `textBox4` не равны нулю. Если они равны нулю, то линия не будет видна на изображении.
     
    1. Посмотреть предыдущие комментарии (3)
    2. ChatGPT
      SINRANX, попробуйте добавить следующую строку кода в метод `pictureBox1_Paint`:

      CSHARP

      pictureBox1.CreateGraphics();
      Также убедитесь, что вы не скрываете `pictureBox1` или не перекрываете его другими элементами управления. Если это не поможет, попробуйте создать новый проект и повторить все шаги заново.
    3. SINRANX Автор темы
      ChatGPT, не работает, может я просто неправильно настроил сам PictureBox на форме?
    4. ChatGPT
      SINRANX, возможно, проблема в настройках `pictureBox1`. Попробуйте следующее:

      1. Убедитесь, что свойство `Visible` установлено в `true`.
      2. Установите свойство `SizeMode` в `PictureBoxSizeMode.Normal`.
      3. Установите свойство `BorderStyle` в `FixedSingle`.
      4. Установите свойство `BackColor` в любой цвет, кроме белого.
      5. Установите свойство `Image` в `null`.
      6. Установите свойство `Dock` в `None`.

      Если это не поможет, попробуйте создать новый `PictureBox` на форме и повторить все шаги заново.
  3. hydrotical
    CSHARP
    using System;
    using System.Windows.Forms;

    namespace WindowsFormsApp3
    {
    public partial class Form1 : Form
    {
    int[] m_p = new int[5];

    public Form1()
    {
    InitializeComponent();
    pictureBox1.SizeMode = PictureBoxSizeMode.Normal; // Установка режима размера
    }

    private void Form1_Load(object sender, EventArgs e)
    {
    this.Text = "Рисуем Линию";
    button1.Text = "Рисовать";
    pictureBox1.BringToFront();
    pictureBox1.Width = 400; // Задайте требуемую ширину
    pictureBox1.Height = 300; // Задайте требуемую высоту
    }

    private void button1_Click(object sender, EventArgs e)
    {
    m_p[1] = Convert.ToInt32(textBox1.Text);
    m_p[2] = Convert.ToInt32(textBox2.Text);
    m_p[3] = Convert.ToInt32(textBox3.Text);
    m_p[4] = Convert.ToInt32(textBox4.Text);
    pictureBox1.Invalidate(); // Перерисовка pictureBox1
    }

    private void pictureBox1_Paint(object sender, PaintEventArgs e)
    {
    // Рисуем линию
    e.Graphics.DrawLine(System.Drawing.Pens.Green, m_p[1], m_p[2], m_p[3], m_p[4]);
    }
    }
    }
     
    1. SINRANX Автор темы
      hydrotical, Спасибо, но не помогло [IMG]
  4. SINRANX
    SINRANX Автор темы 24 май 2023 :coder: https://lolz.live/threads/7377398/ 1324 11 май 2021
    Я не исключаю того, что я просто неправильно настроил сам PictureBox на форме
     
  5. vtlstolyarov
    vtlstolyarov 24 май 2023 474 8 янв 2022
    Покажи весь код - я создал с нуля форму как у тебя и твой код у меня работает:
    [IMG]
    Может ты где-то не подписался на событие (Paint или Click)?
     
    1. Посмотреть предыдущие комментарии (2)
    2. SINRANX Автор темы
      vtlstolyarov, я не понимаю , почему у меня не работает, ты можешь в архив закинуть файл этот и мне скинуть в тг, допустим?
    3. vtlstolyarov
      SINRANX, лучше наоборот :) ты скинь куда-нибудь свой проект (лучше всего на GitHub)
    4. SINRANX Автор темы
      vtlstolyarov, сейчас попробую сделать)
Top