خب تا اینجا پیش رفتم و درست عمل میکنه. فقط یه مشکل وجود داره وقتی موقع لود عکسها پنل رو که اسکرول میکنم اون row که تعریف کردم بهم میخوره.مثلا یه کم پایینتر میافته عکسا. ولی اگه اسکرول نکنم مشکلی پیش نمیاد. اینم راهنمایی کنید عالی میشه.
int row = 0;
int col = 0;
private BackgroundWorker _worker1;
string[] files;
int index = 0;
public GalleryFrm()
{
InitializeComponent();
}
Bitmap bmp = null;
private void GalleryFrm_Load(object sender, EventArgs e)
{
_worker1 = new BackgroundWorker();
_worker1.DoWork += new DoWorkEventHandler(worker1_DoWork);
_worker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_worker1_RunWorkerC ompleted);
AppSeetingClass.SetSetting();
files = Directory.GetFiles(@"D:\FileServer\Gallery");
if (files.Length > 0)
{
MessageBox.Show(files.Length.ToString());
startdowork();
}
}
public void startdowork()
{
if (index < files.Length)
{
_worker1.RunWorkerAsync(files[index]);
index++;
}
}
private void _worker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
startdowork();
}
private void worker1_DoWork(object sender, DoWorkEventArgs e)
{
if (e.Argument.ToString().Substring(e.Argument.ToStri ng().Length - 2, 2) != "db")
{
bmp = new Bitmap(e.Argument.ToString());
var card = new PictureBox();
card.BackgroundImage = bmp;
card.Padding = new Padding(0);
card.BackgroundImageLayout = ImageLayout.Stretch;
//card.MouseDown += new MouseEventHandler(card_click);
card.Size = new Size(200, 200);
card.Left = col + 20;
card.Top = row;
if (col > 400)
{
col = 0;
row += 220;
}
else
col += 220;
CreateList(card);
}
}
private void CreateList(Control card)
{
if (this.InvokeRequired)
this.Invoke((Action<Control>)AddItem, card);
else
AddItem(card);
}
private void AddItem(Control card)
{
panel1.Controls.Add(card);
}
اینم تصویر بعد از اسکرول