This works great for me, sorry not VB. Zooming in, then out, or vice-versa, will take you back to where you started.
Readfield, ME US
private void trackZoom_ValueChanged(object sender, EventArgs e) {
// If we are not showing jpegs/rasters we can update the zoom for each
//click of track bar. This code is duplicated in the mouseup event
//where we handle zooming if jpegs are being displayed.
//if (!Globals.Globals.ShowJPGs) {
int trackMovedAmount = trackZoom.Value - trackZoomPreviousValue;
if (trackMovedAmount != 0) {
// Get existing extents
Extents extOld = new Extents();
extOld = (Extents)map.Extents;
Extents extNew = new Extents();
// Save new value
trackZoomPreviousValue = trackZoom.Value;
if (trackMovedAmount > 0) { //zoom in
double zoomFactor = 0.2;
for (int i = 0; i < trackMovedAmount; i++) {
extNew.SetBounds(extOld.xMin + (double)zoomFactor * (extOld.xMax - extOld.xMin), extOld.yMin + (double)zoomFactor * (extOld.yMax - extOld.yMin), 0, extOld.xMax - (double)zoomFactor * (extOld.xMax - extOld.xMin), extOld.yMax - (double)zoomFactor * (extOld.yMax - extOld.yMin), 0);
extOld = extNew;
}
}
else { //zoom out
double zoomFactor = 0 - 0.3333333;
for (int i = 0; i < (0 - trackMovedAmount); i++) {
extNew.SetBounds(extOld.xMin + (double)zoomFactor * (extOld.xMax - extOld.xMin), extOld.yMin + (double)zoomFactor * (extOld.yMax - extOld.yMin), 0, extOld.xMax - (double)zoomFactor * (extOld.xMax - extOld.xMin), extOld.yMax - (double)zoomFactor * (extOld.yMax - extOld.yMin), 0);
extOld = extNew;
}
}
map.Extents = extNew; //Required to have new extents take effect
mapWidth = DistanceAcrossMap();
}
}
DonReadfield, ME US