using LibraryDatabaseApp.Properties;
using Microsoft.VisualBasic.ApplicationServices;
using Mysqlx.Crud;
using System.Security.Cryptography.X509Certificates;
using System.Windows.Forms;
using static System.Reflection.Metadata.BlobBuilder;
namespace LibraryDatabaseApp
{
public partial class Form1 : Form
{
BindingSource bookBindingSource = new BindingSource();
private Main_Form mainForm;
public int bookCount = 24;
public Form1(Main_Form mainForm)
{
InitializeComponent();
this.mainForm = mainForm;
this.KeyPreview = true;
this.KeyDown += Form1_KeyDown;
// Enable FlowLayoutPanel scrolling
flowLayoutPanel1.AutoScroll = true;
// Attach event handlers
flowLayoutPanel1.Scroll += FlowLayoutPanel1_Scroll;
VScrollBar1.Scroll += VScrollBar1_Scroll;
// Initialize scrollbar state
UpdateScrollBar();
}
private void UpdateScrollBar()
{
// Get the total content height and the visible height
int contentHeight = flowLayoutPanel1.DisplayRectangle.Height;
int visibleHeight = flowLayoutPanel1.ClientSize.Height;
if (contentHeight > visibleHeight) // If content is larger than the visible area
{
VScrollBar1.Enabled = true;
// Configure scrollbar properties
VScrollBar1.Minimum = 0;
VScrollBar1.Maximum = contentHeight - visibleHeight;
VScrollBar1.LargeChange = visibleHeight;
VScrollBar1.SmallChange = 20;
// Synchronize scrollbar with FlowLayoutPanel scroll position
SafeSetScrollBarValue(VScrollBar1, -flowLayoutPanel1.AutoScrollPosition.Y);
}
else
{
VScrollBar1.Enabled = false; // Disable scrollbar if no scrolling is required
}
}
private void Form1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyCode == Keys.Enter)
{
button2_Click(sender, e);
}
}
private Panel CreateBookPanel(Book book)
{
Panel bookPanel = new Panel
{
Width = 200,
Height = 250,
Margin = new Padding(10),
BorderStyle = BorderStyle.FixedSingle,
Tag = book // Store the book object for easy retrieval
};
bookPanel.Click += BookPanel_Click;
PictureBox coverPictureBox = new PictureBox
{
Width = 180,
Height = 120,
SizeMode = PictureBoxSizeMode.Zoom,
Dock = DockStyle.Top,
};
coverPictureBox.Load(book.ImageURL);
coverPictureBox.Click += BookPanel_Click;
Label titleLabel = new Label
{
Text = book.BookName,
AutoSize = false,
Width = bookPanel.Width,
Height = 40,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.Top
};
titleLabel.Click += BookPanel_Click;
Label authorLabel = new Label
{
Text = "Author: " + book.AuthorName,
AutoSize = false,
Width = bookPanel.Width,
Height = 20,
TextAlign = ContentAlignment.MiddleCenter,
Dock = DockStyle.Top
};
authorLabel.Click += BookPanel_Click;
bookPanel.Controls.Add(coverPictureBox);
bookPanel.Controls.Add(titleLabel);
bookPanel.Controls.Add(authorLabel);
return bookPanel;
}
private void BookPanel_Click(object sender, EventArgs e)
{
Panel clickedPanel = sender as Panel;
if (clickedPanel == null && sender is Control control && control.Parent is Panel parentPanel)
{
clickedPanel = parentPanel;
}
if (clickedPanel != null && clickedPanel.Tag is Book selectedBook)
{
BookForm bookForm = new BookForm(
mainForm,
selectedBook.BookName,
selectedBook.AuthorName,
selectedBook.Year.ToString(),
selectedBook.ImageURL,
selectedBook.ISBN,
selectedBook.Description,
selectedBook.Language
);
mainForm.LoadForm(bookForm);
}
}
private void button1_Click(object sender, EventArgs e)
{
BooksDAO booksDAO = new BooksDAO();
List books = booksDAO.getAllBooks();
flowLayoutPanel1.Controls.Clear();
foreach (var book in books)
{
Panel bookPanel = CreateBookPanel(book);
flowLayoutPanel1.Controls.Add(bookPanel);
}
UpdateScrollBar(); // Update scrollbar after content changes
}
private void button2_Click(object sender, EventArgs e)
{
BooksDAO booksDAO = new BooksDAO();
string searchTerm = textBox1.Text;
List searchResults = booksDAO.searchBooks(searchTerm);
flowLayoutPanel1.Controls.Clear();
foreach (var book in searchResults)
{
Panel bookPanel = CreateBookPanel(book);
flowLayoutPanel1.Controls.Add(bookPanel);
}
if (searchResults.Count == 0)
{
MessageBox.Show("No books found for the search term: " + searchTerm);
}
UpdateScrollBar(); // Update scrollbar after content changes
}
private void button3_Click(object sender, EventArgs e)
{
mainForm.LoadForm(new MenuForm(mainForm));
}
private void pictureBox1_Click(object sender, EventArgs e)
{
mainForm.LoadForm(new MenuForm(mainForm));
}
private void pictureBox2_Click(object sender, EventArgs e)
{
mainForm.LoadForm(new MenuForm(mainForm));
}
private void FlowLayoutPanel1_Scroll(object sender, ScrollEventArgs e)
{
SafeSetScrollBarValue(VScrollBar1, -flowLayoutPanel1.AutoScrollPosition.Y);
}
private void VScrollBar1_Scroll(object sender, ScrollEventArgs e)
{
flowLayoutPanel1.AutoScrollPosition = new Point(0, VScrollBar1.Value);
}
private void SafeSetScrollBarValue(VScrollBar scrollBar, int value)
{
if (scrollBar.Value != value)
{
if (value < scrollBar.Minimum)
scrollBar.Value = scrollBar.Minimum;
else if (value > scrollBar.Maximum)
scrollBar.Value = scrollBar.Maximum;
else
scrollBar.Value = value;
}
}
}
}
Графический дизайн формы 1
Я попробовал чат gpt, но получилось только хуже. Я нашел несколько простых решений на YouTube, но они ничего не сделали. Может кто-нибудь проверить мой код, пожалуйста, я в отчаянии.
Я пытался найти ответ и ничего не нашел. Помогите кто-нибудь пожалуйста, я в отчаянии. Вот мой полный код Form1 и графический дизайн Form1. [code]using LibraryDatabaseApp.Properties; using Microsoft.VisualBasic.ApplicationServices; using Mysqlx.Crud; using System.Security.Cryptography.X509Certificates; using System.Windows.Forms; using static System.Reflection.Metadata.BlobBuilder;
namespace LibraryDatabaseApp { public partial class Form1 : Form { BindingSource bookBindingSource = new BindingSource(); private Main_Form mainForm; public int bookCount = 24;
// Initialize scrollbar state UpdateScrollBar(); }
private void UpdateScrollBar() { // Get the total content height and the visible height int contentHeight = flowLayoutPanel1.DisplayRectangle.Height; int visibleHeight = flowLayoutPanel1.ClientSize.Height;
if (contentHeight > visibleHeight) // If content is larger than the visible area { VScrollBar1.Enabled = true;
// Synchronize scrollbar with FlowLayoutPanel scroll position SafeSetScrollBarValue(VScrollBar1, -flowLayoutPanel1.AutoScrollPosition.Y); } else { VScrollBar1.Enabled = false; // Disable scrollbar if no scrolling is required } }
private Panel CreateBookPanel(Book book) { Panel bookPanel = new Panel { Width = 200, Height = 250, Margin = new Padding(10), BorderStyle = BorderStyle.FixedSingle, Tag = book // Store the book object for easy retrieval };
private void SafeSetScrollBarValue(VScrollBar scrollBar, int value) { if (scrollBar.Value != value) { if (value < scrollBar.Minimum) scrollBar.Value = scrollBar.Minimum; else if (value > scrollBar.Maximum) scrollBar.Value = scrollBar.Maximum; else scrollBar.Value = value; } } } } [/code] Графический дизайн формы 1 Я попробовал чат gpt, но получилось только хуже. Я нашел несколько простых решений на YouTube, но они ничего не сделали. Может кто-нибудь проверить мой код, пожалуйста, я в отчаянии.